LoginSignup
8
4

More than 1 year has passed since last update.

フォルダ内の最新ファイルの特定

Last updated at Posted at 2021-12-04

はじめに

 2021/11/20(土)に参加した、PBIJP Power Query 秘密特訓「虎の穴」炎の復活編 #9 - connpassの私の発表について、フィードバックを受けた内容等について記します

発表の概要

 勉強中のPower Queryのビデオコース、Power Query Academy - Skillwave Trainingから、

フォルダ内にある同形式のCSVから、最新の1ファイルの内容を読み取る

についてやってみた。

最新のファイルにフィルターで絞った後、Contentカラム以外を削除して中身を取り出し、パスとファイル名のハードコードを避ける

という注意点を学んだ、ということを、バッドケース、ベターケースの操作動画を見せながら、学んだことを説明しました。

最新のファイルの取り出し

フォルダにファイルがたくさんあるとき、最新のソートして、一番を上にある最新をクリックすると... とすると、パスとファイル名がハードコードされるステップになる。

それを避ける例として、

image.png

こちらで最新1行にする。Content列のみにする

image.png

そして中身を展開する。

フォルダーの中の何でファイルを特定するのか(キーが何か)

 かがたさん( @PowerBIxyz )から、こちらの方法でも、ファイルとパスではなく別なものでハードコードされている、それをよく理解することが大事、とアドバイスがあり、いろいろな表現を試すことをやりました。

何がキーとなっているか → Table.Keys

ステップを1つ追加して(fxを押して記述)、Table.Keysを使うことで、何がキーに使われているのかが確認できます。

image.png

こちらのリストのRecordはポインタです。クリックして中身を見ると、

image.png

となり、プライマリー(Primary)キーが、Columsでセットされいます。Cloumsをクリックして中身を見ると、

image.png

となっています。この内容は、ある1行を特定するのに、フォルダーのパスと名前をもってして、プライマリーキーと特定している、ということです。

Content列のみにして、Binaryをクリックして中身を見るということは、パスと名前が削除されているときに、プライマリーは別ものを使うので

image.png

となっているように、カーリーブラケットで囲まれる0行目をプライマリーキーとして使う、使い方をしていることになります。

言い方を変えると、

  • Keyが存在するとき、そのKeyを使う
  • 存在しないときは、行を特定するユニークキーが提供されている

ということです。プライマリーキーを削除することで、別な行の特定の仕方が得られる、んですね。

応用

この考え方を分かっていると、最新にソートされている中で、

最新より一つ前のものは、= #"Removed Columns"{1}[Content]

と指定すればよい、といったことができます。

さらに他の類似例では、最新の3つのファイルを読み込む、といったときは、

= Table.FirstN(Source,3)

とするなど、M言語が作られる動作や意味が解っていると、やりたいことがよりできるようになる、と教わりました。

おわりに

 自分が学んだ内容(インプット)を、発表(アウトプット)してみると、何がわかってわかっていなかったのか、そして熟達された方のアドバイスで、より深まることができます。ありがたい限りです。

8
4
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
8
4