はじめに
2021/11/20(土)に参加した、PBIJP Power Query 秘密特訓「虎の穴」炎の復活編 #9 - connpassの私の発表について、フィードバックを受けた内容等について記します
発表の概要
勉強中のPower Queryのビデオコース、Power Query Academy - Skillwave Trainingから、
フォルダ内にある同形式のCSVから、最新の1ファイルの内容を読み取る
についてやってみた。
最新のファイルにフィルターで絞った後、Contentカラム以外を削除して中身を取り出し、パスとファイル名のハードコードを避ける
という注意点を学んだ、ということを、バッドケース、ベターケースの操作動画を見せながら、学んだことを説明しました。
最新のファイルの取り出し
フォルダにファイルがたくさんあるとき、最新のソートして、一番を上にある最新をクリックすると... とすると、パスとファイル名がハードコードされるステップになる。
それを避ける例として、
こちらで最新1行にする。Content列のみにする
そして中身を展開する。
フォルダーの中の何でファイルを特定するのか(キーが何か)
かがたさん( @PowerBIxyz )から、こちらの方法でも、ファイルとパスではなく別なものでハードコードされている、それをよく理解することが大事、とアドバイスがあり、いろいろな表現を試すことをやりました。
何がキーとなっているか → Table.Keys
ステップを1つ追加して(fxを押して記述)、Table.Keysを使うことで、何がキーに使われているのかが確認できます。
こちらのリストのRecordはポインタです。クリックして中身を見ると、
となり、プライマリー(Primary)キーが、Columsでセットされいます。Cloumsをクリックして中身を見ると、
となっています。この内容は、ある1行を特定するのに、フォルダーのパスと名前をもってして、プライマリーキーと特定している、ということです。
Content列のみにして、Binaryをクリックして中身を見るということは、パスと名前が削除されているときに、プライマリーは別ものを使うので
となっているように、カーリーブラケットで囲まれる0行目をプライマリーキーとして使う、使い方をしていることになります。
言い方を変えると、
- Keyが存在するとき、そのKeyを使う
- 存在しないときは、行を特定するユニークキーが提供されている
ということです。プライマリーキーを削除することで、別な行の特定の仕方が得られる、んですね。
応用
この考え方を分かっていると、最新にソートされている中で、
最新より一つ前のものは、= #"Removed Columns"{1}[Content]
と指定すればよい、といったことができます。
さらに他の類似例では、最新の3つのファイルを読み込む、といったときは、
= Table.FirstN(Source,3)
とするなど、M言語が作られる動作や意味が解っていると、やりたいことがよりできるようになる、と教わりました。
おわりに
自分が学んだ内容(インプット)を、発表(アウトプット)してみると、何がわかってわかっていなかったのか、そして熟達された方のアドバイスで、より深まることができます。ありがたい限りです。