🎉
Power BIで複数ファイルをインポートしたい
Power BIで複数ファイルをインポートしたい
同じ情報を持つ(カラム定義が同じなど)複数ファイルを束ねて活用したいことがある。
複数ファイルをインポートする手順について記載する。
複数ファイルをインポートする手順
前提
- Power BI DesktopのPower Queryエディターで実施している。
- インポートしたい複数ファイルはローカルに存在し、同じフォルダー内にあるものとする。
- multiple_filesフォルダーに3つのCSVファイル
- hoge.csv/fuga.csv/piyo.csv
- それぞれidとname列をもつ
- multiple_filesフォルダーに3つのCSVファイル
新しいソース
を選択
手順1.
フォルダー
コネクタで接続してフォルダパスを指定
手順2.- フォルダーパスには複数ファイルが存在するフォルダーを指定する。
データの結合と変換
を選択
手順3.- フォルダー内の各ファイルに関する情報をもつテーブルが表示される。
ファイルの結合
の各項目を適切に選択
手順4.- 各項目
- サンプルファイル:どのファイルを基準に結合するか。(fuga.csv)
- 元のファイル:ファイルの保存形式にあわせる。
- 区切り記号:ファイル形式にあわせる。
- データ型検出:各列のデータ型を推測するときに利用されるデータセット範囲
OK
を選択
手順5. -
その他のクエリ
グループにmultiple_filesというクエリができる。- 複数ファイルが結合された結果を含むテーブル
-
Source.Name
列は、どのファイルに存在していたかを示す。
-
- クエリ名は、デフォルトではインポートしたフォルダー名となる。
- 複数ファイルが結合された結果を含むテーブル
-
ヘルパークエリ
グループにクエリが自動で作成される。
Appendix
上記手順を実施したことで具体的にどのようなクエリが作成され、実行されているか記載する。
クエリの関係性
クエリの主な関係を示す。
パラメーター1
パラメーター1
クエリはパラメーターであり、バイナリデータ型でその既定値としてサンプルファイル
が設定されている。
サンプルファイル
手順4で指定したファイルのバイナリデータを取得している。
本手順では、パラメーター1
にfuga.csvのバイナリデータが設定されている。
サンプルファイル
let
// 指定されたフォルダー(multiple_files)の情報をテーブルとして読み込む
ソース = Folder.Files("C:\Users\XXXX\Desktop\import_multiple_files\multiple_files"),
// 指定されたファイル(fuga.csv)のバイナリデータ([Content])を返す
#"C:\Users\XXXX\Desktop\import_multiple_files\multiple_files\_fuga csv1" = ソース{[#"Folder Path"="C:\Users\XXXX\Desktop\import_multiple_files\multiple_files\",Name="fuga.csv"]}[Content]
in
#"C:\Users\XXXX\Desktop\import_multiple_files\multiple_files\_fuga csv1"
ファイルの変換
ファイルの変換
はカスタム関数であり、パラメーター1
を引数としてパラメーター1
に格納されているバイナリデータからCSVファイルの中身を取得する関数である。
ファイルの変換
let
// JavaScriptのアロー関数のような形式
ソース = (パラメーター1) => let
// `サンプルファイルの変換`のクエリと連動(詳細はサンプルファイルの変換で記載)
ソース = Csv.Document(パラメーター1,[Delimiter=",", Columns=2, Encoding=932, QuoteStyle=QuoteStyle.None]),
昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true])
in
昇格されたヘッダー数
in
ソース
サンプルファイルの変換
サンプルファイルをどう読み込むかのクエリが記載されている。
このクエリに基づいて各ファイルを読み込むため、各ファイル共通で実施したい処理はここに記載する。
サンプルファイルの変換
let
// CSVを指定された設定で読み込み
ソース = Csv.Document(パラメーター1,[Delimiter=",", Columns=2, Encoding=932, QuoteStyle=QuoteStyle.None]),
// 最初の行をヘッダーとして利用
昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true])
in
昇格されたヘッダー数
結合された結果を含むクエリ
結合された結果を含むクエリは下記のようになる。
結合された結果を含むクエリ
let
ソース = Folder.Files("C:\Users\XXXX\Desktop\import_multiple_files\multiple_files"),
#"フィルター選択された非表示の File1" = Table.SelectRows(ソース, each [Attributes]?[Hidden]? <> true),
// バイナリデータから`ファイルの変換`関数を使って中身をテーブルとして取得し`ファイルの変換`列として追加
カスタム関数の呼び出し1 = Table.AddColumn(#"フィルター選択された非表示の File1", "ファイルの変換", each ファイルの変換([Content])),
#"名前が変更された列 1" = Table.RenameColumns(カスタム関数の呼び出し1, {"Name", "Source.Name"}),
削除された他の列1 = Table.SelectColumns(#"名前が変更された列 1", {"Source.Name", "ファイルの変換"}),
// `サンプルファイル`のバイナリデータを`ファイルの変換`関数でテーブルを取得し、列名を取得
// その列名を使って`ファイルの変換`列に格納されているテーブルを展開
展開されたテーブル列1 = Table.ExpandTableColumn(削除された他の列1, "ファイルの変
換", Table.ColumnNames(ファイルの変換(#"サンプル ファイル"))),
変更された型 = Table.TransformColumnTypes(展開されたテーブル列1,{{"Source.Name", type text}, {"id", Int64.Type}, {"name", type text}})
in
変更された型
参考ページ
Discussion