25
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Power BIAdvent Calendar 2021

Day 17

Power Queryで列名を一括で変換する

Last updated at Posted at 2021-12-17

この記事はMicrosoft Power BI Advent Calendar 2021に参加しています。
使用しているPower QueryはPower BIに付属の物で、2021/12/17時点の最新バージョンです。

Table.RenameColumnsを使ったPower Queryでの列名変換

Power Queryでテーブルの列名を変更する場合、Table.RenameColumns関数を使います。

概要

構文は以下の通りです。

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
= Table.RenameColumns(テーブル,{{"A", "Rename_A"},{"B","Rename_B"},{"C","Rename_C"}})

変換表を使って列名を一括変換する

ここでは列名の変換表を用意して、テーブルの列名を一括変換していきます。

変換表からリストを生成する

変換表のテーブルを基にリストを生成します。

まず変換表のテーブルを用意します。

image.png

次に列の追加タブからカスタム列を選択します。

image.png

カスタム列の式は以下の通りです。

カスタム列
={[変更前の列名を格納した列], [変更後の列名を格納した列]}

image.png

これでリストにネストされたリストのカスタム列が追加されました。

image.png

中身は変更前の列名と変更後の列名のセットです。

image.png

次に追加したカスタム列を選択して、変換タブのリストに変換を選択します。

image.png

これで列名の一括変換に使うリストが完成しました。

image.png

列名を変換する

列名を変換したいテーブルを用意します。

image.png

クエリにはテーブルと、先ほど用意した変換用のリストがあります。

image.png

適当な列の名前を変更すると、名前が変更された列のステップが生成されます。

image.png
image.png

Table.RenameColumnsリスト部分を用意した変換用のリストに置き換えます。

image.png
image.png

用意した変換リストに存在する列がリネームされました。

MissingFieldの設定

変換用のリストの中に、テーブルに存在しない列があるとエラーになります。
image.png
image.png
image.png

この場合、Table.RenameColumnsにオプショナルのMissingFieldを設定する事でエラーを回避できます。

Table.RenameColumns
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を使うと、リストに存在しない列を無視して列をリネームします。
image.png

MissingField.UseNull

MissingField.UseNullを使うと、列をリネームした上でリストに存在しない列を作成します。
この時、作成された列の値は全てnullになります。
image.png

##応用:列名に一括してプレフィックスを付ける
ここでは応用として、テーブルの全ての列にプレフィックスを付けていきます。

テーブルから列名だけを抽出する

まずテーブルを用意します。
image.png
次にホームタブの行の保持から上位の行を保持を選択し、行数に0を設定します。
image.png
image.png
列名だけ残りました。
image.png
ホームダブの1行目をヘッダーとして使用からヘッダーを1行目として使用を選択します。
image.png
列名だけのテーブルが出来ました
image.png

元の列名との変換表を作る

列を全て選択して、ホームタブから列のピボット解除を選択します。
image.png
列に元の列名が格納されています。
image.png
列を選択し、列の追加タブから書式内のプレフィックスの追加を選択します。
image.png
付けたいプレフィックスを設定します。
image.png
これで元の列名との変換表が完成しました。
image.png
後の手順は変換表を使って列名を一括変換すると同じです。

まとめ

変換前の列名と変換後の列名は必ずセットで

例外はありません。

リストの扱いに慣れよう

テーブルリストで構成されています。

MissingFieldをうまく使おう

エラー処理だけではなく、様々なデータから決まった列を持ったテーブルを作れます。


これで一回一回列名を変えたりする手間が無くなるかもしれません。
手間をかけずに色々と出来れば楽になります。

25
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?