モデル リレーションシップを操作する
この演習では、特に多様ディメンションの必要性に対処するために、モデル リレーションシップを使用します。 アクティブなリレーションシップと非アクティブなリレーションシップの操作、およびリレーションシップの動作を変更するデータ分析式 (DAX) 関数も含まれます。
この演習では、次の方法を学習します。
- モデル図のリレーションシップ プロパティを解釈します。
- リレーションシップのプロパティを設定します。
- リレーションシップの動作を変更する DAX 関数を使用します。
このラボの所要時間は約 45 分です。
注:この演習を完了するには、Microsoft Fabric 試用版が必要です。
モデル リレーションシップを探索する
この演習では、事前に開発された Power BI Desktop ソリューションを開き、データ モデルについて学習します。 その後、アクティブなモデル リレーションシップの動作を調べていきます。
スターター ファイルをダウンロードする
-
https://aka.ms/fabric-relationships-starter
から売上分析スターター ファイルをダウンロードし、それをローカル コンピューター (任意のフォルダー) に保存します。 -
ダウンロードしたファイルに移動し、それを Power BI Desktop で開きます。
注:変更の適用を求める警告は無視して閉じます。
データ モデルを確認する
-
Power BI Desktop で、左側にある [モデル] ビューに切り替えます。
-
モデル図を使って、モデルのデザインを確認します。
モデルは、6 つのディメンション テーブルと 1 つのファクト テーブルで構成されます。Sales ファクト テーブルには販売注文の詳細が格納されます。これは、クラシック スター スキーマ設計です。**
-
Date と Sales のテーブルの間には 3 つのリレーションシップがあることがわかります。
Date テーブルの DateKey 列は、リレーションシップの “一” の側を表す一意の列です。Date テーブルの任意の列に適用されたフィルターは、いずれかのリレーションシップを使用して Sales テーブルに反映されます。**
-
3 つのリレーションシップのそれぞれにカーソルを合わせると、Sales テーブルの “多” 側の列が強調表示されます。
-
OrderDateKey 列とのリレーションシップは実線であり、他のリレーションシップは点線で表されていることに注意してください。
実線は、アクティブなリレーションシップを表します。2 つのモデル テーブル間にアクティブなリレーションシップ パスは 1 つだけ存在でき、そのパスが既定でテーブル間でのフィルター反映のために使用されます。逆に、点線は非アクティブなリレーションシップを表します。非アクティブなリレーションシップは、DAX 数式によって明示的に呼び出された場合にのみ使用されます。**
現在のモデル デザインは、Date テーブルが多様ディメンションであることを示しています。このディメンションは、受注日、納品期日、または出荷日としての役割を果たすことができます。どの役割になるかは、レポートの分析要件によって決まります。**
このラボでは、多様ディメンションをサポートするモデルを設計する方法について説明します。**
日付データを視覚化する
このタスクでは、日付別に販売データを視覚化し、リレーションシップのアクティブな状態を切り替えます。
-
レポート ビューに切り替えます。
-
テーブル ビジュアルを追加するには、 [視覚化] ペインでテーブル ビジュアル アイコンを選択します。
-
テーブル ビジュアルに列を追加するには、 [データ] ペイン (右側にあります) で、まず Date テーブルを展開します。
-
Fiscal Year 列をドラッグして、テーブル ビジュアルにドロップします。
-
Sales テーブルを展開して開き、Sales Amount 列をドラッグしてテーブル ビジュアルにドロップします。
-
テーブル ビジュアルを確認します。
テーブル ビジュアルには、Sales Amount 列が年別にグループ化されて表示されています。しかし、Fiscal Year は何を意味するのでしょうか。テーブル Date と Sales の間には OrderDateKey 列とのアクティブなリレーションシップがあるため、Fiscal Year は、注文を受けた会計年度を意味します。**
どの会計年度かを明確にするために、ビジュアル フィールドの名前を変更 (またはビジュアルにタイトルを追加) しましょう。**
-
テーブル ビジュアルの [視覚化] ペインで、[列] ウェル内から下矢印を選択し、[この視覚エフェクトの名前変更] を選択します。
-
テキストを「Order Year」に置き換えて、Enter キーを押します。
注:ビジュアル フィールドの名前は、その名前をダブルクリックすると簡単に変更できます。
-
テーブル ビジュアルの列ヘッダーが新しい名前に更新されていることに注意してください。
リレーションシップのアクティブな状態を変更する
このタスクでは、2 つのリレーションシップのアクティブな状態を変更します。
-
[モデリング] リボンの [リレーションシップの管理] を選択します。
-
[リレーションシップの管理] ウィンドウで、Sales と Date のテーブルの間のリレーションシップについて、OrderDateKey 列 (リストの 3 番目) の [アクティブ] チェック ボックスをオフにします。
-
Sales と Date のテーブルの間のリレーションシップについて、ShipDateKey 列 (リストの最後) の [アクティブ] チェック ボックスをオンにします。
-
[閉じる] を選択します。
これらの構成により、Date と Sales のテーブルの間のアクティブなリレーションシップが ShipDateKey 列に切り替わりました。**
-
テーブル ビジュアルに、出荷年別にグループ化された販売額が表示されるようになったことを確認します。
-
最初の列の名前を Ship Year に変更します。
最初の行は空白のグループを表します。これは、一部の注文がまだ出荷されていないためです。言い換えると、Sales テーブルの ShipDateKey 列に空白があります。**
-
[リレーションシップの管理] ウィンドウで、次の手順に従って OrderDateKey リレーションシップをアクティブに戻します。
-
[リレーションシップの管理] ウィンドウを開きます
-
ShipDateKey リレーションシップ (リストの最後) の [アクティブ] チェック ボックスをオフにします
-
OrderDateKey リレーションシップ (リストの 3 番目) の [アクティブ] チェック ボックスをオンにします
-
[リレーションシップの管理] ウィンドウを閉じます
-
テーブル ビジュアルの最初のビジュアル フィールドの名前を Order Year に変更します
次の演習では、DAX 数式でリレーションシップをアクティブにする方法を学習します。**
-
非アクティブなリレーションシップを使用する
この演習では、DAX 数式でリレーションシップをアクティブにする方法を学習します。
非アクティブなリレーションシップを使用する
このタスクでは、USERELATIONSHIP 関数を使用して非アクティブなリレーションシップをアクティブにします。
-
[データ] ペインで、Sales テーブルを右クリックし、 [新しいメジャー] を選択します。
-
数式バー (リボンの下にあります) で、テキストを次のメジャー定義に置き換え、Enter キーを押します。
Sales Shipped = CALCULATE ( SUM ( 'Sales'[Sales Amount] ), USERELATIONSHIP ( 'Date'[DateKey], 'Sales'[ShipDateKey] ) )
この数式で、CALCULATE 関数を使用してフィルター コンテキストを変更します。この計算では、これが ShipDateKey リレーションシップをアクティブにする USERELATIONSHIP 関数です。**
-
[メジャー ツール] コンテキスト リボンの [書式設定] グループ内で、小数点以下の桁数を 2 に設定します。
-
Sales Shipped メジャーをテーブル ビジュアルに追加します。
-
テーブル ビジュアルの幅を広げて、すべての列が表示されるようにします。
リレーションシップをアクティブとして一時的に設定するメジャーを作成することは、多様ディメンションを操作する 1 つの方法です。ただし、多くのメジャー用に多様バージョンを作成する必要がある場合は、面倒になる可能性があります。たとえば、販売関連のメジャーが 10 個あり、多様ディメンションである日付が 3 個ある場合は、30 個のメジャーを作成することを意味します。それらを計算グループを使用して作成すると、プロセスが簡単になる可能性があります。**
もう 1 つの方法は、多様ディメンションごとに異なるモデル テーブルを作成することです。これは、次の演習で行います。**
-
テーブル ビジュアルからメジャーを削除するには、[視覚化] ペインの [列] ウェル内で、Sales Shipped フィールドの X を押します。
別の日付テーブルを追加する
この演習では、出荷日の分析をサポートする日付テーブルを追加します。
非アクティブなリレーションシップを削除する
このタスクでは、ShipDateKey 列への既存のリレーションシップを削除します。
-
[モデル] ビューに切り替えます。
-
モデル図で ShipDateKey リレーションシップを右クリックし、 [削除] を選択します。
-
削除するかどうかを確認するメッセージが表示されたら、 [はい] を選択します。
リレーションシップを削除すると、Sales Shipped メジャーにエラーが発生します。このラボでは、後ほどメジャーの数式を書き換えます。**
リレーションシップ オプションを無効にする
このタスクでは、2 つのリレーションシップ オプションを無効にします。
-
[ファイル] リボン タブで、 [オプションと設定] を選択してから、 [オプション] を選択します。
-
[オプション] ウィンドウの左下にある [現在のファイル] グループ内で、 [データの読み込み] を選択します。
-
[リレーションシップ] セクションで、有効になっている 2 つのオプションをオフにします。
一般的に、日常の作業では、これらのオプションを有効にしておいてかまいません。ただし、このラボの目的のために、リレーションシップを明示的に作成します。**
-
[OK] を選択します。
別の日付テーブルを追加する
このタスクでは、別の日付テーブルをモデルに追加するクエリを作成します。
-
[ホーム] リボン タブで、[クエリ] グループの中から [データの変換] アイコンを選択します。これによって [Power Query エディター] が開きます。
“接続方法の指定を求められたら、[資格情報の編集] を選択します。”**
“Windows の既定の接続設定は、[現在の資格情報を使用する] のままにして、[接続] を選択します。”**
“[はい] を選択して警告メッセージを閉じます。”**
-
[Power Query エディター] ウィンドウの [クエリ] ペイン (左側にあります) で、Date クエリを右クリックして、 [参照] を選びます。
参照元のクエリとは、別のクエリをソースとして使用するクエリです。つまり、この新しいクエリは、Date クエリから日付を 取得します。**
-
[クエリの設定] ペイン (右側にあります) で、 [名前] ボックスのテキストを「Ship Date」に置き換えます。
-
DateKey 列の名前を変更するには、DateKey 列ヘッダーをダブルクリックします。
-
テキストを ShipDateKey に置き換えてから、Enter キーを押します。
-
また、Fiscal Year 列の名前を Ship Year に変更します。
可能であれば、すべての列の名前を、それらの役割がわかるように変更することをお勧めします。このラボでは、簡単にするために 2 つの列の名前だけを変更します。
-
テーブルをモデルに読み込むには、 [ホーム] リボン タブで [閉じて適用] アイコンを選びます。
-
テーブルがモデルに追加されたら、リレーションシップを作成するために、Ship Date テーブルから ShipDateKey 列を Sales テーブルの ShipDateKey 列にドラッグします。
-
Ship Date と Sales のテーブルの間にアクティブなリレーションシップが存在するようになったことに注目してください。
出荷日データを視覚化する
このタスクでは、新しいテーブル ビジュアル内の出荷日データを視覚化します。
-
レポート ビューに切り替えます。
-
テーブル ビジュアルを複製するには、まずビジュアルを選択します。
-
[ホーム] リボン タブで、 [クリップボード] グループの [コピー] を選択します。
-
コピーしたビジュアルを貼り付けるには、 [ホーム] リボン タブで、 [クリップボード] グループの [貼り付け] を選択します。
ヒント: Ctrl + C と Ctrl + V のショートカットを使用することもできます。**
-
新しいテーブル ビジュアルを既存のテーブル ビジュアルの右側に移動します。
-
新しいテーブル ビジュアルを選択し、[視覚化] ペインの [列] ウェル内で、Order Year フィールドを削除します。
-
[データ] ペインで、Ship Date テーブルを展開して開きます。
-
新しいテーブル ビジュアルに新しいフィールドを追加するには、[Ship Date] テーブルから “Ship Year” フィールドを [列] ウェルの “Sales Amount” フィールドの上にドラッグします。
-
新しいテーブル ビジュアルに、出荷年別にグループ化された販売額が表示されていることを確認します。
これで、モデルに 2 つの日付テーブルが存在するようになり、それぞれに Sales テーブルとのアクティブなリレーションシップがあります。この設計アプローチの利点は、柔軟性があることです。すべてのメジャーと集計可能なフィールドをどちらの日付テーブルでも使用できるようになりました。**
ただし、いくつかの欠点があります。各多様テーブルは、より大きな規模のモデルには有利ですが、ディメンション テーブルは通常、行数に関しては大規模ではありません。多様テーブルごとにモデル構成を複製することも必要になります (日付テーブルのマーキング、階層の作成、その他の設定など)。また、テーブルを追加すると、フィールドの数が圧倒的に多くなる可能性があります。ユーザーが必要なモデル リソースを見つけることが難しくなる場合があります。**
最後に、1 つのビジュアルでフィルターの組み合わせを実現することはできません。たとえば、メジャーを作成せずに、同じビジュアルで受注済みの販売と出荷済みの販売を組み合わせることはできません。次の演習では、そのメジャーを作成します。**
他のリレーションシップ関数を探索する
この演習では、他の DAX リレーションシップ関数を操作します。
他のリレーションシップ関数を探索する
このタスクでは、CROSSFILTER および TREATAS 関数を使用して、計算中のリレーションシップの動作を変更します。
-
[データ] ペインの Sales テーブル内から、Sales Shipped メジャーを選択します。
-
数式バーのテキストを次の定義で置き換えます。
Sales Shipped = CALCULATE ( SUM ( 'Sales'[Sales Amount] ), CROSSFILTER ( 'Date'[DateKey], 'Sales'[OrderDateKey], NONE ), TREATAS ( VALUES ( 'Date'[DateKey] ), 'Ship Date'[ShipDateKey] ) )
この数式では、CALCULATE 関数を使用し、変更されたリレーションシップの動作を使って Sales Amount 列を合計します。CROSSFILTER 関数で、OrderDateKey 列へのアクティブなリレーションシップを無効にします (この関数はフィルターの方向を変更することもできます)。TREATAS 関数で、コンテキスト内の DateKey 値を ShipDateKey 列に適用することにより、仮想リレーションシップを作成します。**
-
変更した Sales Shipped メジャーを最初のテーブル ビジュアルに追加します。
-
最初のテーブル ビジュアルを確認します。
-
空白のグループがないことに注意してください。
OrderDateKey 列に空白がないため、空白のグループは生成されませんでした。未出荷の販売を表示するには、別のアプローチが必要です。**
未出荷の販売を表示する
このタスクでは、未出荷の販売額を表示するメジャーを作成します。
-
次の定義を使用して、Sales Unshipped という名前のメジャーを Sales テーブルに作成します。
Sales Unshipped = CALCULATE ( SUM ( 'Sales'[Sales Amount] ), ISBLANK ( 'Sales'[ShipDateKey] ) )
この数式により、ShipDateKey 列が空白である Sales Amount 列を合計します。**
-
小数点以下 2 桁を使用してメジャーの書式を設定します。
-
新しいビジュアルをページに追加するには、最初にレポート ページの空白の領域を選択します。
-
[視覚化] ペインで [カード] ビジュアル アイコンを選択します。
-
Sales Unshipped メジャーをカード ビジュアルにドラッグします。
-
最終的なレポート ページ レイアウトが次のようになっていることを確認します。
仕上げ
演習を終了するには、Power BI Desktop を閉じます。ファイルを保存する必要はありません。