はじめに
現場で作成しているデータをPower BIに読み込みたいのだが諸事情によりこんな状況に陥ってしまった
- フォルダには複数のファイルが入っていて、最新のファイルの名前が特定できない
- ここから更新日時が最新のファイルのデータだけをPowerBIで取得したい
- ファイル名は今後も変わり続けるので、Power BIでデータ更新する際に最新のファイルの名前が変わっていても対応できるようにしたい
- 本来は同じファイル名で上書きすればよいのだけど諸事情によりそうならない
Power Query エディターをポチポチするとこうなった
Data modified列に「最も遅い」でフィルタをかける
Content列のファイルの結合をクリック
(ここでBinaryの方をクリックするとファイル名が変わったときに対応できない)
読み込みたいオブジェクト(今回はSheet1)を選んでOKをクリック
これでファイル名が変わっても最新のファイルのデータを取得することができた。なんだけどヘルパークエリが自動でできてクエリ一覧がごちゃっとするのが好みじゃない・・・
詳細エディターで頑張って編集してみる
Excel.Workbook
に渡すファイルパスを作ることができれば何とかなりそうなのでName列とFolder Path列から値を取得する方法を考えた
頑張った成果
「フォルダ名とファイル名を取得してファイルパスを作る」の部分がPower Query エディターポチポチではできないところ
最新ファイルのデータを取得
let
// フォルダ内のファイルリストを取得
FileList = Folder.Files("D:\Users\reisy\Documents\PowerPlatform\複数ファイルの保存場所"),
// 最新のファイルのレコードに絞り込む
LatestFileRecord = Table.SelectRows(FileList, let latest = List.Max(FileList[Date modified]) in each [Date modified] = latest),
// フォルダ名とファイル名を取得してファイルパスを作る
FolderPath = LatestFileRecord{0}[Folder Path],
LatestFileName = LatestFileRecord{0}[Name],
FilePath = FileList{[Folder Path = FolderPath, Name = LatestFileName]}[Content],
// Excelファイルをインポートする
ImportedExcelBook = Excel.Workbook(FilePath),
ImportedExcelSheet = ImportedExcelBook{[Item="Sheet1",Kind="Sheet"]}[Data]
in
ImportedExcelSheet
まとめ
Power Query エディターをポチポチするだけでできる方法を考えるのはより多くの人と一緒に活用するためには重要と思っている。
だけどポチポチだけではできないこともあるし、できなくはなくてもより合理的なクエリを考えていくためにポチポチオンリーからは脱却していかないといけないなー