鷹尾祥(アキラ)のExcel BI ブログ

Excelの革新的機能であるパワーピボット/パワークエリ/DAXについて紹介します。

非アクティブなリレーションシップとUSERRELATIONSHIP関数

アクティブなリレーションシップとUSERRELATIONSHIP関数

f:id:modernexcel7:20210403113217p:plain

目標

通常、テーブルとテーブルは1つのリレーションシップでつなげることができます。このとき、追加のリレーションシップをつなげると非アクティブなリレーションシップになります。

非アクティブなリレーションシップはふだんは休眠状態ですが、USERRELATIONSHIP関数を使うことで有効にすることができます。同時にアクティブなリレーションシップは休眠状態になります。

技術的なポイント

  • 既にリレーションシップのあるテーブルに、追加で非アクティブなリレーションシップを作ります。
  • メジャーを作るときに、USERRELATIONSHIP関数をCALCULATEに渡してリレーションショップを切り替えます。

USERELATIONSHIP 関数 (DAX) - DAX | Microsoft Docs

実践

売上明細に日付請求日の2つの日付があったとき、カレンダーテーブルを増やすことなく、1つのカレンダーテーブルを共有してそれぞれの売上を計算します。

データとレポートについて

以下のようにF_売上明細テーブルとカレンダーテーブルは日付を介してリレーションショップが定義されています。
f:id:modernexcel7:20210403175421p:plain

売上合計を集計するためのメジャーは以下のように定義されています。

f:id:modernexcel7:20210403175553p:plain

この時、ピボットで集計すると通常の集計を行います。
f:id:modernexcel7:20210403175715p:plain

「つなげる」ステップ

F_売上明細テーブルには日付の他に請求日があります。
請求日は取引日が10日より以前の時は、翌月25日、それ以降は翌々月の25日がセットされています。

f:id:modernexcel7:20210403175814p:plain

この請求日カレンダーテーブルの日付をリレーションショップでつなぎます。

すると、これらのテーブルには既存のリレーションシップがあるので、黄色い部分のメッセージが表示されます。

f:id:modernexcel7:20210403113029p:plain

追加されたリレーションシップは以下のように非アクティブの状態になります。

f:id:modernexcel7:20210403113455p:plain

Power Pivotアドインのある環境でダイアグラムビューを確認すると、非アクティブなリレーションシップは以下のように点線で表示されます。

f:id:modernexcel7:20210403113217p:plain

「かぞえる」ステップ

この非アクティブなリレーションシップを使用した集計を行うため、以下のメジャーを追加します。

売上合計(請求基準) :=
CALCULATE (
    [売上合計],
    USERELATIONSHIP ( 'F_売上明細'[請求日], 'カレンダー'[日付] )
)

f:id:modernexcel7:20210403114300p:plain

ここで登場したUSERRELATIONHSIP関数は、CALCULATE関数のようにフィルターを引数として受け取る関数の中でのみ使用できます。

また、1 : Manyの関係性で言うと、それぞれの引数は以下のようになります。

第1引数:Many(数字テーブル = Fact Table)側、F_売上明細の「請求日」
第2引数:1(まとめテーブル= Dimension Table)側、カレンダーの「日付」

作成したメジャーを追加します。それぞれ同じカレンダーテーブルを参照していますが、結果が異なります。

f:id:modernexcel7:20210403114645p:plain


値を確認するために、2016年4月10日以前の売上合計を確認すると、2,057,900です。

f:id:modernexcel7:20210403114555p:plain

f:id:modernexcel7:20210403181640p:plain

翌月の売上合計(請求基準)を見ると、2,057,900となっており一致しています。

f:id:modernexcel7:20210403183617p:plain

まとめ

通常、テーブルどうしは1つのアクティブなリレーションシップでのみ連結されています。それ以外のリレーションシップは非アクティブとして休眠状態になりますが、USERRELATIONSHIP関数で他のリレーションシップに代わり有効化できます。

利用方法としては、日付のほか、①取引先と顧客を同一テーブルで定義している場合、②1つの売上に営業主担当と営業副担当が付いている場合の例が挙げられます。