PowerQueryに少し慣れてくると、自動作成されたステップをまとめ、ステップを減らすことで、シンプルなステップにしたいと思うようになります。
特に、簡単な処理なのに自動作成されたステップが多くなると、他に簡略化できる方法がないのかと思ってしまいます。
今回は、Table.TransformColumnsを理解してステップをまとめる事例です。
ただし、より属人化する懸念があるため、他者と共有する場合は使用しない方が良いと思います。
内容:
使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2405)です。
簡単な処理なのに、ステップ数が多くなるパターン
例えば、下図は元の列をゼロ埋めにするステップの事例です。
この処理では、
- ゼロ埋めをした列の追加(「変換用の列」を追加)
- 元の列の削除
- 追加した「変換用の列」の名前の変更
をしています。変換に3ステップ要しています。
これは、PowerQueryの変換メニューにこのような処理がないことと、同じ名前の列名を複数作成できないためです。
このようなとき、1回のステップで変換できるのがTable.TransformColumnsです。
Table.TransformColumnsでステップを減らす手順
アウトプットイメージ
上述の「簡単な処理でステップ数が多くなるパターン」を次のように1ステップで変換しています。
作成手順
できるだけコード記述の量を減らした方法で説明します。
変換前のデータ状態
まず、変換前のデータかは下図のとおりです。
「変換用の列」を一旦追加
PowerQueryの「列の追加」メニューより、「変換用の列」を一旦追加します。
事例のゼロ埋めをした列の追加の詳細は、下記のとおりです。
その結果、次のようなステップが追加されます。
数式は、以下のとおりです。
= Table.AddColumn(変更された型, "カスタム", each Text.PadStart(Text.From([コード], "ja-JP"), 4, "0"), type text)
以降、この数式の赤字部分の式を利用します。
Table.TransformColumnsのステップ追加
前述の「適用したステップ」の最後のステップを右クリックし、「後にステップの挿入」をクリックします。
下図は「後にステップの挿入」をした後の状態です。
このステップの「数式バー」で、式を下記のように修正します。
= Table.TransformColumns(変更された型, {"コード", each Text.PadStart(Text.From(_, "ja-JP"), 4, "0"), type text})
この数式の説明は次のとおりです。
- Table.TransformColumnsは次の構文です。
{ 列名、変換、新しい列の型 } - 変更された型、"コード"は、前述の「変換前のデータ状態」のステップ名と列名です。
- 赤字部分は、前述の「変換用の列」を一旦追加で自動作成された数式がベースです。
1点注意があり、元の数式で対象の列を示す[コード]の部分は、”_”(アンダースコア)にします。
数式を変換し、余分なステップ(一旦追加した「変換用の列」)を削除した結果が冒頭のアウトプットイメージです。
補足説明と注意点
Table.TransformColumnsのステップ追加方法
前述手順で、「Table.TransformColumnsのステップ追加」は、PowerQueryの変換メニューで適当な変換処理(例えば、文字の抽出など)をして、修正する方法でもOKです。
変換メニューの式で、Table.TransformColumns関数が利用されていることが分かります。
アンダースコアの修正漏れに注意
Table.TransformColumnsのステップ追加時、アンダースコアの修正漏れがあると次のようなエラーメッセージが表示されます。
Expression.Error: フィールド アクセスを型 ●● に適用できません。
以上、【Power Query】ステップをまとめて減らす方法でした。
なお、繰り返しになりますが、この方法はTable.TransformColumnsの理解には役立ちますが、他者と共有するPowerQueryの場合は属人化リスクを考慮すべきです。
他者によるステップの修正時、処理の流れが理解できない可能性があり、メンテナンス性を考慮すると、あまりまとめない方が良いと思います。