しばらく山とランは遠のいています

仕事、そしてコロナの関係でしばらく山やランからは遠ざかっています。来年の春から復帰できるようそろそろ運動再開していきたいと思います。ちなみに今、BIツールのPower BIが半分趣味になって、完全な運動不足になっています。20201020

2020年12月29日火曜日

【Power BI】クエリ―のマージ、いわゆるテーブルのJOIN機能が難解なので整理してみた

Power BIで、テーブルをJOIN(行レベルで二つのテーブルを合成)しようとするとパラメータ設定項目が多く悩みます。関数も二種類あります。最近行き詰ることがあり、少し自分なりに整理してみました。

それにしてもMSのこの手のドキュメントはほんと不親切で、どうしたらいいのかさっぱりわかりません。日本語翻訳は理解できないところがよくありますが、この場合、英語の原文読んでも理解できないことが多いです(そもそも難解ではないかと)。。


DAXでJOINもできますが、高度なJOINが出来るPowerQueryでのJOINについて整理を試みてみます。PowerQueryではテーブルのJOINをクエリマージと呼んでいます。

JOINには、Table.NestedJoinTable.Joinの二つの関数があります。
JOINの種類(joinKind)は以下の種類があります。この時に、注意しないといけないのはドキュメントやPBI Desktopアプリで表示される説明等でJOINする二つのテーブルの呼び方が異なります。左側・右側はなんとなくわかりますが、1番目・2番目と呼ばれることもあり、最近まで何を言っているのかよくわかりませんでした。左側のテーブルが1番目ということでした。また、Key列は1列だけでなく複数列で指定することが出来ます、これも説明が見つからず、最近まで複数列必要な時はわざわざ列を合成していました。




2つの関数の違いは、joinAlgorithmのあるかないかです。joinAlgorithmはJOINするときのアルゴリズムを指定します。これによりパフォーマンスの最適化が出来ると思います。ただし、joinAlgorithmは、公式ドキュメントがなく、なんとPowerQueryの編集窓で、joinAlgorithm.Typeと打つと説明が出てきます。これMSのサポートに教えてもらいました(こんなのどこにも書いていなく、完全な裏技です)。なお、Power Queryの画面のボタンでコードを自動生成する場合は前者の関数が使われています。

= Table.NestedJoin( 
       左側テーブル名(1番目), {"列名1", "列名2",…},    
       右側テーブル名(2番目), {"列名1", "列名2",…},
      "結合後の右側テーブルのデータを入れ子にする列名",    
      (オプション) joinKind, (オプション) keyEqualityComparers)

= Table.Join
       左側テーブル名(1番目), {"列名1", "列名2",…},    
       右側テーブル名(2番目), {"列名1", "列名2",…},
      "結合後の右側テーブルのデータを入れ子にする列名",
      (オプション) joinKind, (オプション) joinAlgorithm,
      (オプション) keyEqualityComparers)

joinAlgorithm.Type

最後に残ったオプションkeyEqualityComparersは、まったくドキュメントがなく、MSのサポートに問い合わせても結局回答を得られませんでした。PowerQuerの画面であいまいな一致を選択すると以下のコードが出てくるので、あいまいな一致を使う場合のパラメータとわたしは考えています。
[IgnoreCase=true, IgnoreSpace=true, NumberOfMatches=5, Threshold=0.8]
サポートに聞いてもわからないという不思議なオプションです。

0 件のコメント: