Power Pivot の最も強力な機能の 1 つは、テーブル間のリレーションシップを作成し、その関連テーブルを使用して関連データを検索またはフィルター処理できる機能です。 Power Pivot で提供される数式言語である Data Analysis Expressions (DAX) を使用して、テーブルから関連する値を取得します。 DAX ではリレーショナル モデルが使用されるため、別のテーブルまたは列内の関連値または対応する値を簡単かつ正確に取得できます。 Excel の VLOOKUP に慣れている場合、Power Pivot のこの機能は似ていますが、実装がはるかに簡単です。
ルックアップを行う数式は、集計列の一部として、またはピボットテーブルやピボットグラフで使用するメジャーの一部として作成できます。 詳細については、次のトピックを参照してください。
このセクションでは、検索用に提供される DAX 関数について、関数の使用例と共に説明します。
注
使用するルックアップ操作の種類または検索式によっては、最初にテーブル間のリレーションシップを作成する必要がある場合があります。
検索関数について
別のテーブルから一致するデータまたは関連データを検索する機能は、現在のテーブルには何らかの識別子しかないが、必要なデータ (製品価格、名前、その他の詳細値など) が関連テーブルに格納されている場合に特に便利です。 また、現在の行または現在の値に関連する別のテーブルに複数の行がある場合にも役立ちます。 たとえば、特定の地域、店舗、販売員に関連付けられているすべての売上を簡単に取得できます。
配列に基づく VLOOKUP や、複数の一致する値の最初の値を取得する LOOKUP などの Excel 検索関数とは対照的に、DAX では、キーで結合されたテーブル間の既存のリレーションシップに従って、正確に一致する単一の関連値を取得します。 DAX は、現在のレコードに関連するレコードのテーブルを取得することもできます。
注
リレーショナル データベースに慣れている場合は、Power Pivot での参照を Transact-SQL の入れ子になった subselect ステートメントと考えることができます。
1 つの関連する値の取得
RELATED 関数は、現在のテーブルの現在の値に関連する別のテーブルから単一の値を返します。 必要なデータを含む列を指定すると、関数はテーブル間の既存のリレーションシップに従って、関連テーブルの指定された列から値を取り出します。 場合によっては、関数は関係のチェーンに従ってデータを取得する必要があります。
たとえば、Excel に今日の出荷のリストがあるとします。 ただし、このリストには従業員 ID 番号、注文 ID 番号、および出荷主 ID 番号しか含まれていないため、レポートが読みにくいためです。 必要な追加情報を取得するには、そのリストを Power Pivot リンク テーブルに変換し、EmployeeID を EmployeeKey フィールドに、ResellerID を ResellerKey フィールドに照合して、Employee テーブルと Reseller テーブルとのリレーションシップを作成します。
リンク テーブルに参照情報を表示するには、次の数式を含む 2 つの新しい集計列を追加します。
= RELATED('Employees'[EmployeeName])
= RELATED('Resellers'[会社名])
参照前の今日の出荷
| OrderID | EmployeeID | ResellerID |
|---|---|---|
| 100314 | 230 | 445 |
| 100315 | 15 | 445 |
| 100316 | 76 | 108 |
Employees テーブル
| EmployeeID | Employee | リセラー |
|---|---|---|
| 230 | Kuppa Vamsi | モジュラーサイクルシステム |
| 15 | Pilar Ackeman | モジュラーサイクルシステム |
| 76 | キム・ラルス | 関連付けられたバイク |
今日の出荷とルックアップ
| OrderID | EmployeeID | ResellerID | Employee | リセラー |
|---|---|---|---|---|
| 100314 | 230 | 445 | Kuppa Vamsi | モジュラーサイクルシステム |
| 100315 | 15 | 445 | Pilar Ackeman | モジュラーサイクルシステム |
| 100316 | 76 | 108 | キム・ラルス | 関連付けられたバイク |
この関数は、リンク テーブルと "従業員およびリセラー" テーブルの間のリレーションシップを利用して、レポートの各行の正しい名前を取得します。 関連する値を計算に使用することもできます。 詳細と例については、 RELATED 関数を参照してください。
関連する値のリストの取得
RELATEDTABLE 関数は既存のリレーションシップに従い、指定されたテーブルの一致するすべての行を含むテーブルを返します。 たとえば、各リセラーが今年何件の注文を行ったかを調べたいとします。 [リセラー] テーブルに、次の数式を含む新しい集計列を作成します。この数式は、ResellerSales_USDテーブル内の各リセラーのレコードを検索し、各リセラーが行った個々の注文数をカウントします。
=COUNTROWS(RELATEDTABLE(ResellerSales_USD))
この数式では、RELATEDTABLE 関数はまず、現在のテーブルの各リセラーの ResellerKey の値を取得します。 (Power Pivot はテーブル間の既存のリレーションシップを使用するため、数式の任意の場所に ID 列を指定する必要はありません)。次に、RELATEDTABLE 関数は、各リセラーに関連するすべての行をResellerSales_USDテーブルから取得し、行をカウントします。 2 つのテーブル間に (直接または間接) リレーションシップがない場合は、ResellerSales_USD テーブルからすべての行を取得します。
サンプル データベースのリセラー Modular Cycle Systems の場合、売上テーブルには 4 つの注文があるため、関数は 4 を返します。 Associated Bikes の場合、リセラーは販売を行っていないため、関数は空白を返します。
| リセラー | このリセラーの売上テーブルのレコード |
|---|---|
| モジュラーサイクルシステム | Reseller ID |
| 445 | |
| 445 | |
| 445 | |
| 445 | |
| Reseller ID | |
| 関連付けられたバイク |
注
RELATEDTABLE 関数は、単一の値ではなくテーブルを返すので、テーブルに対する演算を実行する関数の引数として使用する必要があります。 詳細については、 RELATEDTABLE 関数を参照してください。