リレーションシップの作成
適用対象:SQL Server 2019 以降の Analysis Services Azure Analysis Services Fabric/Power BI Premium
このレッスンでは、データをインポートしたときに自動的に作成されるリレーションシップを確認し、別のテーブル間に新しいリレーションシップを追加します。 リレーションシップとは、2 つのテーブル間を接続し、それらのテーブル内のデータをどのように関連付けるかを決定するものです。 たとえば、DimProduct テーブルと DimProductSubcategory テーブルには、DimProduct テーブル内の各製品が DimProductSubcategory テーブルのサブカテゴリに属しているという事実に基づくリレーションシップがあります。 詳細については、リレーションシップを参照してください。
重要
現時点では、Azure Synapse Analytics (SQL Data Warehouse) と共にインストールされた AdventureWorksDW サンプルの既定のデータベースには、このチュートリアルで説明するテーブル間のリレーションシップはありません。 すべてのリレーションシップを手動で作成する必要があります。 リレーションシップの手動作成については、このレッスンの後半で説明します。
このレッスンの推定所要時間: 10 分
前提条件
この記事は、表形式モデルのチュートリアルの一部であり、チュートリアルでの順番に従って実行する必要があります。 このレッスンのタスクを実行する前に、前のレッスン「レッスン 3: 日付テーブルとしてマークする」を完了する必要があります。
既存のリレーションシップの確認と新しいリレーションシップの追加
データの取得を使用してデータをインポートすると、AdventureWorksDW データベースから 7 つのテーブルが取得されます。 通常、リレーショナル ソースからデータをインポートする際には、既存のリレーションシップがデータと共に自動的にインポートされます。 データ モデル内のリレーションシップを Get Data で自動的に作成するためには、データ ソースにテーブル間のリレーションシップが存在していることが必要です。
モデルのオーサリングを続行する前に、テーブル間のリレーションシップが正しく作成されたかどうかを確認する必要があります。 また、このチュートリアルでは、3 つの新しいリレーションシップを追加します。
既存のリレーションシップを確認するには
[モデル] メニュー > [モデル ビュー ダイアグラム ビュー]> をクリックします。
モデル デザイナーがダイアグラム ビューに表示されるようになります。これは、インポートしたすべてのテーブルを線で結んでグラフィカルな形式で表示します。 テーブル間の線は、データのインポート時に自動的に作成されたリレーションシップを表します。
注意
テーブル間のリレーションシップがまったく表示されない場合、おそらくそのデータソースには、それらのテーブル間のリレーションシップが存在しません。
モデル デザイナーの右下隅にあるミニマップ コントロールを使用して、できるだけ多くのテーブルを含めるようにします。 テーブルをクリックして別の場所にドラッグすれば、テーブルどうし近づけたり、特定の順序に並べたりすることもできます。 テーブルの移動は、テーブル間のリレーションシップには影響しません。 特定のテーブル内のすべての列を表示するには、テーブルの端をクリック、ドラッグして縮小または拡張します。
DimCustomer テーブルと DimGeography テーブル間の実線をクリックします。 これら 2 つのテーブル間の実線は、このリレーションシップがアクティブであることを示しています。つまり、DAX の数式を計算するときに既定で使用されるということです。
DimCustomer テーブル内の GeographyKey 列と DimGeography テーブル内の GeographyKey 列の両方が、それぞれボックス内に表示されています。 これらの列はリレーションシップで使用されます。 リレーションシップのプロパティが [ プロパティ ] ウィンドウにも表示されるようになりました。
ヒント
[リレーションシップの管理] ダイアログ ボックスを使用して、すべてのテーブル間のリレーションシップをテーブル形式で表示することもできます。 [表形式モデル] エクスプローラーで、[リレーションシップ>リレーションシップの管理] を右クリックします。
AdventureWorksDW データベースから各テーブルがインポートされたときに、次のリレーションシップが作成されたことを確認します。
アクティブ テーブル 関連する参照テーブル Yes DimCustomer [GeographyKey] DimGeography [GeographyKey] Yes DimProduct [ProductSubcategoryKey] DimProductSubcategory [ProductSubcategoryKey] Yes DimProductSubcategory [ProductCategoryKey] DimProductCategory [ProductCategoryKey] Yes FactInternetSales [CustomerKey] DimCustomer [CustomerKey] Yes FactInternetSales [ProductKey] DimProduct [ProductKey] リレーションシップのいずれかが存在しない場合は、モデルに DimCustomer、DimDate、DimGeography、DimProduct、DimProductCategory、DimProductSubcategory、FactInternetSales の各表が含まれていることを確認します。 同じデータソース接続のテーブルを別々の時刻にインポートする場合、それらのテーブル間のリレーションシップは作成されず、手動で作成する必要があります。 リレーションシップがまったく表示されない場合、そのデータソースにはリレーションシップが存在しません。 それらをデータ モデルに手動で作成することができます。
詳細を見る
ダイアグラム ビューでは、テーブル間のリレーションシップを示す実線部分に矢印、アスタリスク、数字があります。
矢印は、フィルターの方向を示しています。 アスタリスクは、このテーブルがリレーションシップのカーディナリティの 多くの 側であることを示し、1 つは、このテーブルがリレーションシップの 一 方の側であることを示しています。 リレーションシップを編集する必要がある場合 (リレーションシップの方向やカーディナリティを変更するなど)、リレーションシップ線をダブルクリックして、[リレーションシップを編集] ダイアログを開きます。
これらの機能は、高度なデータ モデリング用であり、このチュートリアルの範囲外です。 詳細については、Analysis Services における表形式モデルの双方向フィルタを参照してください。
場合によっては、特定のビジネス ロジックをサポートするために、モデル内のテーブル間に追加でリレーションシップを作成する必要があります。 このチュートリアルでは、FactInternetSales テーブルと DimDate テーブル間に 3 つの追加のリレーションシップを作成する必要があります。
テーブル間に新しいリレーションシップを追加するには
モデル デザイナーの FactInternetSales テーブルで、OrderDate 列をクリックして長押しし、カーソルを DimDate テーブルの Date 列にドラッグして離します。
Internet Sales テーブルの OrderDate 列と Date テーブルの Date 列の間にアクティブなリレーションシップが作成されたことを示す実線が表示されます。
注意
リレーションシップを作成すると、主テーブルと関連するルックアップ テーブルの間のカーディナリティとフィルターの方向は自動的に選択されます。
FactInternetSales テーブルで、DueDate 列をクリックし、そのままカーソルを DimDate テーブル内の Date 列にドラッグして離します。
FactInternetSales テーブルの DueDate 列と DimDate テーブルの Date 列の間に非アクティブなリレーションシップが作成されたことを示す点線が表示されます。 テーブル間には複数のリレーションシップを持つことができますが、一度にアクティブにできるリレーションシップは 1 つのみです。 非アクティブなリレーションシップは、カスタムの DAX 式で特別な集計を実行することで有効にすることができます。
最後に、もう 1 つリレーションシップを作成します。 FactInternetSales テーブルで、ShipDate 列をクリックし、そのままカーソルを DimDate テーブル内の Date 列にドラッグして離します。