数式内でのリレーションシップと参照

PowerPivot for Excel の最も強力な機能の 1 つに、テーブル間のリレーションシップを作成してから関連テーブルを使用して、関連するデータを参照またはフィルター処理する機能があります。 関連する値をテーブルから取得するには、PowerPivot for Excel に用意されている数式言語である Data Analysis Expressions (DAX) を使用します。 DAX はリレーショナル モデルを使用しているため、他のテーブルまたは列の関連値や対応する値を簡単かつ正確に取得できます。

参照を実行する数式は、計算列の一部として、またはピボットテーブルやピボットグラフで使用するメジャーの一部として作成できます。 詳細については、次のトピックを参照してください。

PowerPivot で使用するメジャー

計算列

ここでは、参照用の DAX 関数と、それらの関数の使用方法の例を紹介します。

注意

使用する参照操作または参照式の種類によって、先にテーブル間のリレーションシップを作成する必要がある場合があります。 リレーションシップ作成の詳細については、「テーブル間のリレーションシップ」を参照してください。

参照関数について

別のテーブルの一致するデータや関連データを参照する機能が特に役立つのは、現在のテーブルに何らかの識別子だけが含まれており、必要とするデータ (製品の価格、名前、その他の詳細な値など) が関連テーブルに保存されている場合です。 また、現在の行や現在の値に関連付けられている行が別のテーブルに複数存在する場合にも役立ちます。 たとえば、特定の地域、店舗、または販売員に関連付けられた総売上を簡単に取得できます。

Excel の参照関数には、VLOOKUP のように配列に基づいて参照する方法と、LOOKUP のように一致する複数の値のうちの最初の値を取得する方法がありますが、DAX はこれとは異なり、キーによって結合されたテーブル間の既存のリレーションシップに従って、正確に一致する 1 つの関連値を取得します。 また、DAX は現在のレコードに関連付けられているレコードのテーブルを取得することもできます。

注意

リレーショナル データベースについて熟知している場合、PowerPivot における参照は、Transact-SQL における入れ子にされたサブセレクト ステートメントと同様のものと考えることができます。

PowerPivot で使用されるリレーショナル モデルの詳細については、「リレーションシップの概要」を参照してください。

単一の関連する値の取得

RELATED 関数は、別のテーブルから、現在のテーブルの現在の値に関連する単一の値を返します。 目的のデータが格納された列が指定されると、関数はテーブル間の既存のリレーションシップを追跡し、関連テーブル内の指定された列から値をフェッチします。 場合によっては、関数がデータを取得するために、連鎖したリレーションシップの追跡が必要になることもあります。

たとえば、Excel 形式で本日の出荷の一覧があるとします。 ところが、一覧に含まれているのは従業員 ID 番号、注文 ID 番号、および再販業者 ID 番号のみであり、わかりにくいレポートになっています。 追加情報を取得するには、この一覧を PowerPivot リンク テーブルに変換し、Employee テーブルと Reseller テーブルへのリレーションシップを作成して、EmployeeID を EmployeeKey フィールドに、ResellerID を ResellerKey フィールドに照合します。

リンク テーブル内の参照情報を表示するには、次の数式を使用して新しい計算列を 2 つ追加します。

= RELATED('Employees'[EmployeeName])
= RELATED('Resellers'[CompanyName])

参照前

参照後

Order ID

EmployeeID

ResellerID

100314

230

445

100315

15

445

100316

76

108

EmployeeID

Employee

Reseller

230

Kuppa Vamsi

Modular Cycle Systems

15

Pilar Ackeman

Modular Cycle Systems

76

Kim Ralls

Associated Bikes

Order ID

EmployeeID

ResellerID

Employee

Reseller

100314

230

445

Kuppa Vamsi

Modular Cycle Systems

100315

15

445

Pilar Ackeman

Modular Cycle Systems

100316

76

108

Kim Ralls

Associated Bikes

この関数では、リンク テーブルと Employees テーブルおよび Resellers テーブルとの間のリレーションシップを使用して、レポート内の各行に正しい名前を取得しています。 関連する値を計算に使用することもできます。 詳細と例については、「RELATED 関数」を参照してください。

一連の関連する値の取得

RELATEDTABLE 関数は、既存のリレーションシップに従って、指定されたテーブルから、一致しているすべての行を取得し、テーブルとして返します。 たとえば、各再販業者からの今年の注文数を調べる必要があるとします。 Resellers テーブルに、次の数式が格納された新しい計算列を作成できます。この数式は、各再販業者のレコードを ResellerSales_USD テーブル内で参照し、再販業者ごとに個々の注文数をカウントします。 これらのテーブルは、DAX サンプル ブックに含まれています。 サンプル データの詳細については、「PowerPivot のサンプル データの入手」を参照してください。

=COUNTROWS(RELATEDTABLE(ResellerSales_USD))

この数式では、まず RELATEDTABLE 関数が現在のテーブル内の再販業者ごとに ResellerKey の値を取得します (数式内で ID 列を指定する必要はありません。PowerPivot が、テーブル間の既存のリレーションシップを使用するためです)。次に RELATEDTABLE 関数が、各再販業者に関連付けられているすべての行を ResellerSales_USD テーブルから取得し、行数をカウントします。2 つのテーブルの間に (直接的にも間接的にも) リレーションシップがない場合は、ResellerSales_USD テーブルの行がすべて取得されます。

サンプル データベースに登録されている Modular Cycle Systems という再販業者の場合は、ResellerSales_USD テーブルに 4 件の注文があるので、関数から 4 が返されます。 Associated Bikes という再販業者については売上がないので、関数は空白を返します。

Reseller

この Reseller に対応する ResellerSales_USD テーブル内のレコード

Modular Cycle Systems

Reseller ID

SalesOrderNumber

445

SO53494

445

SO71872

445

SO65233

445

SO59000

Associated Bikes

  

注意

RELATEDTABLE 関数が返すのは単一の値ではなくテーブルなので、テーブルに関する演算を実行する関数の引数として使用する必要があります。 詳細については、「RELATEDTABLE 関数」を参照してください。

関連項目

概念

レポート、グラフ、およびピボットテーブルへの計算の追加

数式の作成

Data Analysis Expressions (DAX) の概要

数式での集計

その他の技術情報

テーブル間のリレーションシップ