2
11

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 3 years have passed since last update.

ファイル結合→展開時に全てのカラムを展開する(展開するカラムを個別に指定しないで展開)

Last updated at Posted at 2021-04-05

#データをマージして展開するときや、フォルダからファイルを指定して展開する

今回はフォルダを指定して、その中の複数ファイルを取り込んで結合するシナリオを考えてみます。(マージしたテーブルを展開するときも同様に処理できる)

Table と表示されているカラムを展開するときに
image.png
image.png

↑この画面で「(すべての列の選択)」を選んでも、
image.png

生成される式はこんな感じで、カラム名が自動的に指定されて展開されます。

 ↓自動で作成された式

= Table.ExpandTableColumn(削除された他の列, "展開用", {"カラム1", "カラム2", "カラム3", "カラム4"}, {"展開用.カラム1", "展開用.カラム2", "展開用.カラム3", "展開用.カラム4"})

#元データにカラムが増えたらどうなる?

元データにカラムが増えちゃうこともありますよね。

image.png
↑「カラム5」が増えた

データを更新しても…
image.png

うん、カラム5は無視されますね。

#新しく増えたカラムもそのまま取り込みたい!

元の式を見ると、こんなふうになっているので(第四引数は任意なのでグレーで着色)
 Table.ExpandTableColumnの説明はこちら↓
  https://docs.microsoft.com/ja-jp/powerquery-m/table-expandtablecolumn
image.png

元のカラム名のまま展開してよいなら、第三引数に使用するための、テーブルに含まれるカラム名のリストが取得できれば何とかなりそうです。

##テーブル内のカラム名のリストってどうやって取得できるの?

それぞれのテーブルのカラムの中身はこれで取得できそう
image.png

= List.Transform(削除された他の列[展開用],each Table.ColumnNames(_))

ただ、今回は複数ファイルを結合しているため、ファイルごとにカラム名のリストがそれぞれできちゃうので、このまま突っ込むと怒られます。。。
なので、リストの中身同士の和集合(全部足して重複をなくした全カラムのリスト)をList.Unionで作成します。

image.png

= List.Union(List.Transform(削除された他の列[展開用],each Table.ColumnNames(_)))

うん、これで目的のカラム名の一覧になりそう。

##あとは、元の式を置き換えるだけ!

一回、いつも通り展開した式をPowerQueryさんに自動で作ってもらって、
image.png

水色のところをさっきの式で置き換え&青いところを削除
image.png

ぶらっぼう!Book1にしかない、新規追加された カラム5まで取得できるようになりました。

2
11
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
2
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?