Share via


多次元モデル用の DAX

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

この記事では、Power BI で DAX (データ分析式) クエリを使用して、SQL Server Analysis Servicesの多次元モデルに対してレポートを作成する方法について説明します。

これまで、レポート アプリケーションでは多次元データベースに対するクエリ言語として MDX (多次元式) が使用されています。 MDX は、Excel のピボットテーブルや、多次元ビジネス セマンティクスを対象とする他のレポート アプリケーションなどの一般的なビジュアル パターン用に最適化されています。 2012 SP1 SQL Server以降、Analysis Services では、多次元モデルと表形式モデルに対する DAX と MDX の両方の使用がサポートされています。 ただし、DAX はもともと表形式データ モデル用に設計されていました。 DAX は使いやすいと見なされますが、レポートやダッシュボードのテーブル、グラフ、マップなどのよりシンプルなデータ視覚化にも重点を置きます。 Power BI では DAX を使用して、表形式モデルと多次元モデルの両方に対してクエリを実行します。

DAX は主に表形式モデル向けに設計されているため、多次元モデルに対して DAX を使用する場合に理解する必要がある興味深くて便利なマッピングと制約がいくつかあります。

互換性

Power BI では、DAX を使用して、SQL Server 2016 以降の Enterprise または Standard エディションの Analysis Services 多次元モデルに対してクエリを実行します。 SQL Server 2012 および SQL Server 2014 Enterprise エディションまたは Business Intelligence エディションもサポートされていますが、これらのバージョンは現在メインストリーム サポート対象外になっています。

機能

DAX は MDX のサブセットではありません。 DAX は、最初は Excel の数式言語に似た設計でした。 表形式モデルでは、テーブルとリレーションシップで構成されるリレーショナル データ ストアに対して DAX が使用されます。 DAX は、カスタム メジャー、計算列、および行レベルのセキュリティ規則を作成するためにも使用されます。

DAX は、計算言語であるだけでなく、クエリの実行にも使用できます。 この記事では、DAX クエリが多次元モデルに対してどのように機能するかについて説明します。

MDX と DAX の間の相互作用

DAX 式は、表形式モデル内でのみサポートされます。 多次元モデルでは、DAX 式によって作成されたメジャーを使用することはできません。 多次元モデルに対する DAX クエリは、そのモデルで定義されているメジャーまたはその他の計算を参照できますが、これらの計算は MDX 言語を使用して作成する必要があります。 DAX 式は、MDX 式が必要な場合は使用できず、その逆も可能です。また、PATH などの一部の DAX 関数は、多次元モデリングには適用できません。

DAX 構文

DAX 数式の構文は Excel の数式とよく似ていますが、関数、演算子、値の組み合わせを使用します。 個々の関数の構文の詳細については、 DAX 関数リファレンスを参照してください。

多次元オブジェクトと表形式オブジェクトのマッピング

Analysis Services には、多次元モデルの表形式モデル メタデータ表現が用意されています。 多次元モデル内のオブジェクトは、Power BI で表形式オブジェクトとして表されます。 このマッピングは、 DISCOVER_CSDL_METADATA スキーマ行セットを使用して Power BI に公開されます。

オブジェクト マッピング

多次元オブジェクト 表形式オブジェクト
キューブ モデル
キューブ ディメンション テーブル
ディメンション属性 (キー、名前)
[メジャー グループ] テーブル
Measure Measure
[メジャーなしメジャー] グループ Measures という名前のテーブル内
メジャー グループ キューブ ディメンションリレーションシップ Relationship
パースペクティブ パースペクティブ
KPI KPI
ユーザー/親子の階層 Hierarchy
表示フォルダー 表示フォルダー

メジャー、メジャー グループ、および KPI

多次元キューブのメジャー グループは、[Power BI フィールド] ボックスの一覧に電卓アイコン付きのテーブルとして表示されます。

メジャー グループ内のメジャーは、メジャーとして表示されます。 メジャー グループが関連付けられていない計算メジャーがある場合は、メジャーと呼ばれる特別なテーブルの下にグループ化されます。

複雑な多次元モデルを簡素化するために、モデルの作成者は、表示フォルダー内に配置するようにキューブ内の一連のメジャーまたは KPI を定義できます。 Power BI では、表示フォルダーとその中のメジャーと KPI を表示できます。

メジャー グループ内のメジャーと KPI

Power BI フィールドの一覧のメジャーと KPI

variant 型のメジャー

多次元モデル内のメジャーは variant 型です。 つまり、メジャーは厳密に型指定されていないため、さまざまなデータ型を使用できます。 たとえば、次の図では、Financial Reporting テーブルの Amount メジャーは既定では Currency データ型ですが、統計勘定の小計には文字列値 NA (文字列データ型) もあります。 Power BI では、特定のメジャーがバリアントとして認識され、さまざまな視覚化で正しい値と書式設定が表示されます。

variant 型のメジャー

バリアントとして測定する

暗黙のメジャー

表形式モデルでは、ユーザーはフィールドに COUNT、SUM、AVERAGE などの暗黙のメジャーを作成できます。 多次元モデルの場合、ディメンション属性データの格納先は異なるため、暗黙のメジャーに対してクエリを実行すると時間がかかることがあります。 このため、多次元モデルに対する暗黙的なメジャーは Power BI では使用できません。

ディメンション、属性、および階層

キューブ ディメンションは、表形式のメタデータにテーブルとして公開されます。 [Power BI フィールド] リストでは、ディメンション属性が表示フォルダー内の列として表示されます。 AttributeHierarchyEnabled プロパティが False に設定されているディメンション属性。たとえば、Customer ディメンションの誕生日属性、または false に設定された AttributeHierarchyVisible プロパティは、Power BI の [フィールド] リストには表示されません。 複数レベルの階層またはユーザー階層。たとえば、Customer ディメンションの Customer Geography は、Power BI の [フィールド] リストで階層として公開されます。 ディメンション属性の非表示の UnknownMembers は、DAX クエリと Power BI で公開されます。

SQL Server Data Tools (SSDT) と Power BI フィールドの一覧のディメンション、属性、および階層

SSDT と Power BI フィールドの一覧のディメンション、属性、階層

ディメンション属性の型

多次元モデルでは、ディメンション属性を特定のディメンション属性の型に関連付けることがサポートされています。 次の図は Geography ディメンションを 示しています。City、State-Province、Country、Postal Code ディメンションの属性には、地理の種類が関連付けられています。 これらの属性は表形式のメタデータで公開されます。 Power BI はメタデータを認識し、ユーザーがマップの視覚化を作成できるようにします。 これは、Power BI フィールド リストの Geography テーブルの市区町村、国、郵便番号、State-Province 列の横にあるマップ アイコンによって示されます。

SSDT と Power BI フィールドの一覧の Geography ディメンション

SSDT と Power BI の [フィールド] リストのディメンション属性の種類

ディメンションの計算されるメンバー

多次元モデルでは、1 つの実メンバーを持つ All の子の計算メンバーがサポートされます。 このような計算されるメンバーを公開する際の追加の制約は次のとおりです。

  • ディメンションに複数の属性がある場合は、実際の 1 つのメンバーである必要があります。
  • 計算されるメンバーが含まれる属性は、それが唯一の属性である場合を除いて、ディメンションのキー属性にすることはできません。
  • 計算されるメンバーが含まれる属性は、親子属性にすることができません。

ユーザー階層の計算メンバーは Power BI では公開されませんが、ユーザーは引き続きユーザー階層の計算メンバーを含むキューブに接続できます。

既定メンバー

多次元モデルでは、ディメンション属性の既定のメンバーがサポートされています。 既定のメンバーは、クエリのデータ集計時に Analysis Services によって使用されます。 ディメンション属性の既定のメンバーは、表形式のメタデータで対応する列の既定値または既定のフィルターとして公開されます。

Power BI の動作は、属性が適用される場合の Excel ピボットテーブルとほぼ同じです。 ユーザーが既定値を含む Power BI 視覚化 (テーブル、マトリックス、またはグラフ) に列を追加すると、既定値は適用されず、使用可能なすべての値が表示されます。 ユーザーが [フィルター] に列を追加すると、既定値が適用されます。

ディメンションのセキュリティ

多次元モデルでは、ロールを使用したディメンションおよびセル レベルのセキュリティがサポートされています。 Power BI を使用してキューブに接続するユーザーは、ユーザーが属しているロールによって定義された適切なアクセス許可が認証され、評価されます。 ディメンション セキュリティが適用されている場合、Power BI では、それぞれのディメンション メンバーがユーザーに表示されません。 ただし、特定のセルが制限されているセル セキュリティアクセス許可が定義されている場合、そのユーザーは Power BI を使用してキューブに接続できません。 場合によっては、集計データは、一部がセキュリティで保護されたデータから計算されるときに参照できます。

集計可能ではない属性/階層

多次元モデルでは、ディメンションの属性に IsAggregatable プロパティを False に設定できます。 つまり、モデル作成者は、レポート アプリケーションがデータに対してクエリを実行するときに、階層 (属性または複数レベル) にわたってデータを集計しないように指定しています。 Power BI では、このディメンション属性は小計を使用できない列として公開されます。 次の図では、集計不可能な階層である Accounts の例を示します。 Accounts 親子階層の最上位レベルは、他のレベルが集計可能であるのに対して集計可能ではありません。 勘定科目階層 (最初の 2 つのレベル) のマトリックス視覚化では、 勘定レベル 02 の小計が表示されますが、最上位レベルの 勘定科目レベル 01 の小計は表示されません。

Power BI の集計できない階層

バリアントとして測定する

イメージ

Power BI には、イメージをレンダリングする機能が用意されています。 多次元モデルでは、Power BI に表示する画像を提供する方法の 1 つは、画像の URL (Uniform Resource Locator) を含む列を公開することです。 Analysis Services では、ディメンション属性を ImageURL 型としてタグ付けできます。 このデータ型は、表形式のメタデータで Power BI に提供されます。 その後、Power BI は、視覚化内の URL で指定された画像をダウンロードして表示できます。

SSDT でのディメンション属性の ImageURL 型

SSDT の ImageURL ディメンション

親子階層

多次元モデルは親子階層をサポートしており、表形式メタデータの階層として公開されます。 親子階層の各レベルは、非表示の列として公開されます。 親子ディメンションのキー属性は、表形式のメタデータでは公開されません。

SSDT と Power BI フィールドの一覧の親子階層

SSDT と Power BI フィールドの一覧の親子階層

パースペクティブと翻訳

パースペクティブとは、特定のディメンションまたはメジャー グループだけがクライアント ツールに表示されるキューブのビューです。 Cube 接続文字列 プロパティの値としてパースペクティブ名を指定できます。 たとえば、次の接続文字列では、"Direct Sales" は多次元モデルのパースペクティブです。

Data Source=localhost;Initial Catalog=AdventureWorksDW-MD;Cube='Direct Sales'

キューブには、モデル内のさまざまな言語に対して指定されたメタデータとデータ翻訳を含めることができます。 翻訳 (データとメタデータ) を確認するために、アプリケーションはオプションの Locale Identifier プロパティを接続文字列に追加できます。次に例を示します。

Data Source=localhost;Initial Catalog=AdventureWorksDW-MD;Cube='Adventure Works'; Locale Identifier=3084

Power BI Desktopが多次元モデルに接続すると、サーバーに識別された現在のユーザー ロケールが自動的に渡されます。 ただし、これは、Power BI サービスに発行されたレポートには発生しません。

サポートされていない機能

セル レベルのセキュリティ - Power BI レポートではサポートされていません。

アクション - Power BI レポートや多次元モデルに対する DAX クエリではサポートされていません。

名前付きセット - 多次元モデルでは、Power BI または多次元モデルに対する DAX クエリではサポートされていません。

注意

サポートされていないアクションと名前付きセットでは、ユーザーが Power BI を使用するときに多次元モデルに接続したり、多次元モデルを探索したりすることはできません。

CSDLBI 注釈

多次元キューブ メタデータは、CSDLBI (Conceptual Schema Definition Language with Business Intelligence) 注釈によってエンティティ データ モデル (EDM) ベースの概念モデルとして公開されます。

多次元メタデータは、DISCOVER_CSDL_METADATA 要求が Analysis Services インスタンスに送信されるときに、CSDLBI ドキュメントまたは CSDL の出力で表形式モデルの名前空間として表されます。

例: DISCOVER_CSDL_METADATA要求

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
   <Body>
      <Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
         <RequestType>DISCOVER_CSDL_METADATA</RequestType>
         <Restrictions>
            <RestrictionList>
              <CATALOG_NAME>"catalogname"<CATALOG_NAME>
            </RestrictionList>
         </Restrictions>
         <Properties>
            <PropertyList>
            </PropertyList>
         </Properties>
      </Discover>
   </Body>
</Envelope>

DISCOVER_CSDL_METADATA要求には、次の制限があります。

名前 必須 説明
CATALOG_NAME Yes カタログ\データベース名。
PERSPECTIVE_NAME キューブに複数のパースペクティブが含まれている場合は必須。 キューブが 1 つしかない場合や既定のパースペクティブがある場合は省略可能。 多次元データベース内のキューブ名またはパースペクティブ名。
VERSION Yes クライアントによって要求される CSDL のバージョン。 多次元機能と多次元構造はバージョン 2.0 でサポートされています。

返される CSDL 出力ドキュメントは、モデルを名前空間として表し、エンティティ、アソシエーション、およびプロパティを示しています。

CSDLBI 注釈の詳細については、「 CSDL への BI 注釈のテクニカル リファレンス」および 「[MS-CSDLBI]: ビジネス インテリジェンス注釈を使用した概念スキーマ定義ファイル形式」を参照してください。

SuperDAXMD

SQL Server Analysis Servicesの各リリースでは、機能強化によって新規および既存の DAX 関数と機能がサポートされます。 SQL Server 2019 CU5 では、SuperDAX と呼ばれる非公式の表形式モデルに対して最初に導入された DAX 関数のクラスが、多次元モデルに対して有効になりました。

一部の既存の DAX クエリ パターンを再設計する必要がある場合はありますが、SuperDAX 関数はクエリのパフォーマンスを大幅に向上させます。 多次元モデルに SuperDAX を使用する最新の DAX クエリ パターンは、Power BI を使用して多次元データ ソース サーバーを CU5 を使用して 2019 年SQL Serverにアップグレードするための強力なインセンティブを提供します。 詳細については、「 多次元モデルの SuperDAX」を参照してください。

こちらもご覧ください

DAX リファレンス