LoginSignup
8
3

DAXのJOIN関連操作② ~NATURALINNERJOIN~

Last updated at Posted at 2023-12-03

DAXによるJOIN

DAXを利用したJOIN関連の関数をしらべていきます。

本記事は「Microsoft Power BI Advent Calendar 2023」、4日目の記事です。
https://qiita.com/advent-calendar/2023/powerbi
いいね! 👍 よろしくお願いします!

JOIN系関数シリーズ

INNER JOIN(内部結合)

image.png

Inner Joinは左右テーブルの共通部分だけ残ります。
DAXで内部結合を行うときは、NATURALINNERJOIN関数を使用します。

内部結合.dax
NATURALINNERJOIN(<LeftTable>, <RightTable>)

SQLでJOINをする場合は結合するためのキーとなる列を指定しますが、NATURALINNERJOIN関数ではまずリレーションシップの有無が重要です。

リレーションシップが構成されているテーブルであれば、結合キーの自動判別をしてくれます。

実践

LeftTable = 国名マスターと、RightTable = 販売トランザクション、

image.png

結合キーの判定

ドキュメントには以下のように記載があります。

  • テーブルは、2 つのテーブルの共通の列 (名前) で結合されます。 2 つのテーブルに共通の列名がない場合は、エラーが返されます

ただ、リレーションシップが構成されていてれば、列名が違っても、結合されます。

リレーションシップが構成かつ、列名が違う

以下の結果をみてもわかる通り、列名が違っても判定してくれています。

image.png

リレーションシップが未構成かつ、列名が一緒

列名が一緒でもリレーションシップが未構成の場合、結合はできません。

Query (4, 5) 共通結合列が見つかりません。結合関数 'NATURALINNERJOIN' には少なくとも 1 つの共通結合列が必要です。

image.png

TREATASを利用して結合

データリネージュが同一でないと結合がされないため、TREATAS関数を利用すると結合を行うことができます。

Treatas.dax
EVALUATE
VAR country_name_TreatAs =
    TREATAS (
        '国名マスター',
        '販売トランザクション(リレーションシップなし)'[国ID],
        '国名マスター'[国名]
    )
VAR Result =
    NATURALLEFTOUTERJOIN (
        country_name_TreatAs,
        '販売トランザクション(リレーションシップなし)'
    )
RETURN
    Result

image.png

まとめ

明日はOUTERJOINを検証していきます。

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