この記事はMicrosoft Power BI Advent Calendar 2021に参加しています。
使用しているPower QueryはPower BIに付属の物で、2021/12/17時点の最新バージョンです。
Table.RenameColumnsを使ったPower Queryでの列名変換
Power Queryでテーブルの列名を変更する場合、Table.RenameColumns関数を使います。
概要
構文は以下の通りです。
Table.RenameColumns(table as table, renames as list, optional missingField as nullable number) as table
= Table.RenameColumns(テーブル,{"A", "Rename_A"})
引数として列名をリネームする対象のテーブルと、リネーム前の列名とリネーム後の列名を組みにしたリストが必要になります。
リストは必ずリネーム前後の列名で構成された二つのテキストである必要があり、それ以外はエラーが出ます。
{"A", "Rename_A"}
{"A"}
{"A", "Rename_A","Rename_B"}
複数の列名を変更したい場合、リストにリストをネストします。
例としてリネーム前後のテーブルを以下に示します。
リネーム前
A | B | C |
---|---|---|
1 | 2 | 3 |
リネーム後
Rename_A | Rename_B | Rename_C |
---|---|---|
1 | 2 | 3 |
これを行う構文は以下の通りです。
= Table.RenameColumns(テーブル,{{"A", "Rename_A"},{"B","Rename_B"},{"C","Rename_C"}})
変換表を使って列名を一括変換する
ここでは列名の変換表を用意して、テーブルの列名を一括変換していきます。
変換表からリストを生成する
変換表のテーブルを基にリストを生成します。
まず変換表のテーブルを用意します。
次に列の追加
タブからカスタム列
を選択します。
カスタム列の式は以下の通りです。
={[変更前の列名を格納した列], [変更後の列名を格納した列]}
これでリストにネストされたリストのカスタム列が追加されました。
中身は変更前の列名と変更後の列名のセットです。
次に追加したカスタム列を選択して、変換
タブのリストに変換
を選択します。
これで列名の一括変換に使うリストが完成しました。
列名を変換する
列名を変換したいテーブルを用意します。
クエリにはテーブルと、先ほど用意した変換用のリストがあります。
適当な列の名前を変更すると、名前が変更された列
のステップが生成されます。
Table.RenameColumnsのリスト部分を用意した変換用のリストに置き換えます。
用意した変換リストに存在する列がリネームされました。
MissingFieldの設定
変換用のリストの中に、テーブルに存在しない列があるとエラーになります。
この場合、Table.RenameColumnsにオプショナルのMissingFieldを設定する事でエラーを回避できます。
Table.RenameColumns(table as table, renames as list, optional missingField as nullable number) as table
= Table.RenameColumns(テーブル,{"A", "Rename_A"},MissingField.Ignore)
MissingField.Ignore
MissingField.Ignoreを使うと、リストに存在しない列を無視して列をリネームします。
MissingField.UseNull
MissingField.UseNullを使うと、列をリネームした上でリストに存在しない列を作成します。
この時、作成された列の値は全てnull
になります。
##応用:列名に一括してプレフィックスを付ける
ここでは応用として、テーブルの全ての列にプレフィックスを付けていきます。
テーブルから列名だけを抽出する
まずテーブルを用意します。
次にホーム
タブの行の保持
から上位の行を保持
を選択し、行数に0を設定します。
列名だけ残りました。
ホーム
ダブの1行目をヘッダーとして使用
からヘッダーを1行目として使用
を選択します。
列名だけのテーブルが出来ました
元の列名との変換表を作る
列を全て選択して、ホーム
タブから列のピボット解除
を選択します。
値
列に元の列名が格納されています。
値
列を選択し、列の追加
タブから書式
内のプレフィックスの追加
を選択します。
付けたいプレフィックスを設定します。
これで元の列名との変換表が完成しました。
後の手順は変換表を使って列名を一括変換すると同じです。
まとめ
変換前の列名と変換後の列名は必ずセットで
例外はありません。
リストの扱いに慣れよう
MissingFieldをうまく使おう
エラー処理だけではなく、様々なデータから決まった列を持ったテーブルを作れます。
これで一回一回列名を変えたりする手間が無くなるかもしれません。
手間をかけずに色々と出来れば楽になります。