LoginSignup
0
0

複数のファイルが入っているフォルダから最新のファイルのデータだけを取得する

Last updated at Posted at 2024-04-20

はじめに

現場で作成しているデータをPower BIに読み込みたいのだが諸事情によりこんな状況に陥ってしまった
image.png

  • フォルダには複数のファイルが入っていて、最新のファイルの名前が特定できない
  • ここから更新日時が最新のファイルのデータだけをPowerBIで取得したい
  • ファイル名は今後も変わり続けるので、Power BIでデータ更新する際に最新のファイルの名前が変わっていても対応できるようにしたい
  • 本来は同じファイル名で上書きすればよいのだけど諸事情によりそうならない

Power Query エディターをポチポチするとこうなった

フォルダーコネクタで接続
image.png

データの変換をクリック
image.png

Data modified列に「最も遅い」でフィルタをかける
image.png

Content列のファイルの結合をクリック
(ここでBinaryの方をクリックするとファイル名が変わったときに対応できない)
image.png

読み込みたいオブジェクト(今回はSheet1)を選んでOKをクリック
image.png

これでファイル名が変わっても最新のファイルのデータを取得することができた。なんだけどヘルパークエリが自動でできてクエリ一覧がごちゃっとするのが好みじゃない・・・
image.png

詳細エディターで頑張って編集してみる

Excel.Workbookに渡すファイルパスを作ることができれば何とかなりそうなのでName列とFolder Path列から値を取得する方法を考えた
image.png

頑張った成果

「フォルダ名とファイル名を取得してファイルパスを作る」の部分が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

ヘルパークエリがないのですっきり!
image.png

まとめ

Power Query エディターをポチポチするだけでできる方法を考えるのはより多くの人と一緒に活用するためには重要と思っている。
だけどポチポチだけではできないこともあるし、できなくはなくてもより合理的なクエリを考えていくためにポチポチオンリーからは脱却していかないといけないなー

0
0
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
0
0