DAXによるJOIN
DAXを利用したJOIN関連の関数をしらべていきます。
本記事は「Microsoft Power BI Advent Calendar 2023」、4日目の記事です。
https://qiita.com/advent-calendar/2023/powerbi
いいね! 👍 よろしくお願いします!
JOIN系関数シリーズ
INNER JOIN(内部結合)
Inner Joinは左右テーブルの共通部分だけ残ります。
DAXで内部結合を行うときは、NATURALINNERJOIN
関数を使用します。
NATURALINNERJOIN(<LeftTable>, <RightTable>)
SQLでJOINをする場合は結合するためのキーとなる列を指定しますが、NATURALINNERJOIN関数ではまずリレーションシップの有無が重要です。
リレーションシップが構成されているテーブルであれば、結合キーの自動判別をしてくれます。
実践
LeftTable = 国名マスターと、RightTable = 販売トランザクション、
結合キーの判定
ドキュメントには以下のように記載があります。
- テーブルは、2 つのテーブルの共通の列 (名前) で結合されます。 2 つのテーブルに共通の列名がない場合は、エラーが返されます
ただ、リレーションシップが構成されていてれば、列名が違っても、結合されます。
リレーションシップが構成かつ、列名が違う
以下の結果をみてもわかる通り、列名が違っても判定してくれています。
リレーションシップが未構成かつ、列名が一緒
列名が一緒でもリレーションシップが未構成の場合、結合はできません。
Query (4, 5) 共通結合列が見つかりません。結合関数 'NATURALINNERJOIN' には少なくとも 1 つの共通結合列が必要です。
TREATASを利用して結合
データリネージュが同一でないと結合がされないため、TREATAS
関数を利用すると結合を行うことができます。
EVALUATE
VAR country_name_TreatAs =
TREATAS (
'国名マスター',
'販売トランザクション(リレーションシップなし)'[国ID],
'国名マスター'[国名]
)
VAR Result =
NATURALLEFTOUTERJOIN (
country_name_TreatAs,
'販売トランザクション(リレーションシップなし)'
)
RETURN
Result
まとめ
明日はOUTERJOINを検証していきます。