DAX シナリオ
ここでは、次のシナリオで DAX の数式を使用する例へのリンクを示します。
複雑な計算の実行
テキストと日付の操作
条件値とエラーのテスト
タイム インテリジェンスの使用
値の順位付けと比較
はじめに
DAX の数式を初めて使用する場合は、DAX サンプル ブックの例を確認することから始めることをお勧めします。 サンプル ブックの取得方法の詳細については、「PowerPivot のサンプル データの入手」を参照してください。
その他のリソース
次のリンクには、DAX の学習に役立つビデオ、その他のサンプル、およびチュートリアルがあります。
シナリオ: 複雑な計算の実行
DAX の数式を使用すると、カスタム集計、フィルター処理、条件値の使用などを伴う複雑な計算を行うことができます。 ここでは、カスタム計算を使用する方法の例を紹介します。
ピボットテーブルにカスタム計算を作成する
CALCULATE および CALCULATETABLE は、メジャーを定義するための強力で柔軟な関数です。 これらの関数を使用して、計算が実行されるコンテキストを変更できます。 集計の種類または実行する数学的演算をカスタマイズすることも可能です。 例については、次のトピックを参照してください。
式にフィルターを適用する
DAX 関数が引数としてテーブルを受け取るほとんどの場合、テーブル名の代わりに FILTER 関数を使用するか、関数の引数の 1 つとしてフィルター式を指定することによって、テーブルではなくフィルター選択されたテーブルを渡すことが可能です。 次のトピックでは、フィルターの作成方法とフィルターが式の結果に及ぼす影響の例を紹介します。 詳細については、「数式内でのデータのフィルター処理」を参照してください。
FILTER 関数では、式を使用してフィルターの条件を指定できます。その他の関数は、空白値の除外専用に設計されています。
フィルターを選択的に削除して動的な比率を作成する
式内に動的フィルターを作成することによって、次のような質問に簡単に答えることができます。
現在の製品の売上が年間の合計売上に占める割合は?
他の部門と比較して、この部門が全営業年度の総利益に占める割合は?
ピボットテーブル内で使用する式は、ピボットテーブルのコンテキストの影響を受ける可能性がありますが、フィルターの追加または削除によってコンテキストを選択的に変更できます。 ALL のトピックの例では、この方法について示します。 特定の再販業者の売上がすべての再販業者の売上合計に占める比率を調べるには、現在のコンテキストの値をすべてのコンテキストの値で割った値を計算するメジャーを作成します。
ALLEXCEPT のトピックでは、式のフィルターを選択的にクリアする方法の例を紹介します。 どちらの例でも、ピボットテーブルの設計方法によって結果がどのように変化するかを紹介します。
比率とパーセンテージを計算する方法の他の例については、次のトピックを参照してください。
外部ループからの値を使用する
DAX では、計算に現在のコンテキストからの値を使用するだけでなく、一連の関連する計算の作成に以前のループからの値も使用できます。 次のトピックでは、外部ループからの値を参照する式の作成方法を紹介します。 EARLIER 関数では、最大 2 レベルの入れ子になったループがサポートされています。
行コンテキストと関連テーブルについて、およびこの概念を式で使用する方法の詳細については、「DAX の数式のコンテキスト」を参照してください。
トップに戻る
シナリオ: テキストと日付の操作
ここでは、テキストの操作、日付と時刻の値の抽出および構成、条件に基づいた値の作成などの一般的なシナリオの例を紹介した DAX の参照トピックへのリンクを示します。
連結によってキー列を作成する
PowerPivot では、複合キーを使用できません。このため、使用するデータ ソースに複合キーが含まれている場合は、単一のキー列に結合する必要があります。 次のトピックでは、複合キーを基に計算列を作成する方法の一例を紹介します。
テキストの日付から抽出した日付要素を基に日付を構成する
PowerPivot では、日付の操作に SQL Server の日付/時刻データ型が使われます。このため、使用する外部データに異なる形式の日付が含まれている場合 (たとえば、PowerPivot データ エンジンで認識されない地域別日付形式で書かれた日付が使用されている場合、またはデータに整数の代理キーが使用されている場合)、DAX の数式を使用して日付要素を抽出してから、その要素から有効な日付時刻表現を構成することが必要な場合があります。
たとえば、元は整数として表されていた日付の列をテキスト文字列としてインポートした場合、次の式を使うことによってその文字列を日付/時刻値に変換できます。
=DATE(RIGHT([Value1],4),LEFT([Value1],2),MID([Value1],2))
Value1 |
結果 |
01032009 |
1/3/2009 |
12132008 |
12/13/2008 |
06252007 |
6/25/2007 |
次のトピックでは、日付の抽出と構成に使用する関数についてより詳しく説明します。
カスタムの日付または数値書式を定義する
使用するデータに Windows の標準のテキスト書式で表されていない日付または数値が含まれている場合は、値が正しく処理されるようにカスタム書式を定義することができます。 これらの書式は、値を文字列に変換したり、その逆の変換を行うときに使用します。 次のトピックでも、日付と数値の操作に使用できる定義済み書式について詳しく紹介します。
式を使用してデータ型を変更する
PowerPivot では、出力のデータ型はソース列によって決定し、結果のデータ型を明示的に指定することはできません。PowerPivot によって最適なデータ型が自動的に決定されます。 ただし、PowerPivot によって実行される暗黙的なデータ型変換を使用して、出力のデータ型を操作できます。 型の変換の詳細については、「PowerPivot ブックでサポートされているデータ ソース」を参照してください。
日付または数値を表す文字列を数値に変換するには、1.0 を乗算します。 たとえば、次の式によって、現在の日付から 3 日引かれてから、対応する整数値が出力されます。
=(TODAY()-3)*1.0
日付、数値、または通貨の値を文字列に変換するには、その値を空の文字列に連結します。 たとえば、次の式は、今日の日付を文字列として返します。
=""& TODAY()
次の関数を使用しても、特定のデータ型が返されるようにすることができます。
実数を整数に変換する
実数、整数、または日付を文字列に変換する
文字列を実数または日付に変換する
トップに戻る
シナリオ: 条件値とエラーのテスト
Excel と同様に、DAX には、データ内の値をテストして条件に基づいて異なる値を返すことができる関数が用意されています。 たとえば、年間の販売額に応じて「優先」か「重要」というラベルを再販業者に付ける計算列を作成できます。 値をテストする関数は、予期しないデータ エラーで計算が中断するのを防ぐために、値の範囲または型の確認にも使用できます。
条件に基づいた値を作成する
条件に基づいた値のテストや新しい値の生成に、入れ子になった IF 条件を使用できます。 次のトピックでは、条件処理および条件値の簡単な例をいくつか紹介します。
式内のエラーをテストする
Excel と異なり、計算列の行によって有効な値と無効な値を持つことはできません。 つまり、PowerPivot 列のどこかにエラーがある場合、列全体にエラーのフラグが設定されるので、結果が無効な値になる式のエラーは常に修正する必要があります。
たとえば、ゼロで割る式を作成すると、結果が無限、つまりエラーになります。 また、式によっては、数値を想定した値が空白の場合に失敗します。 データ モデルの開発中は、メッセージをクリックして問題に対処できるように、エラーを表示すると便利です。 ただし、ブックをパブリッシュするときは、エラー処理を組み込んで、予期しない値によって計算が失敗しないようにする必要があります。
計算列のエラーが返されないようにするには、論理関数と情報関数を組み合わせて使用して、エラーをテストして常に有効な値が返されるようにします。 次のトピックでは、DAX でこれを実現する簡単な例を紹介します。
トップに戻る
シナリオ: タイム インテリジェンスの使用
DAX タイム インテリジェンス関数には、データから日付または日付範囲を取得するのに役立つ関数が含まれています。 取得した日付または日付範囲を使用して、同種の複数期間に関する値を計算できます。 タイム インテリジェンス関数には、標準の日付間隔を扱う関数も用意されていて、月、年、四半期の値を比較できます。 また、指定した期間の最初と最後の日付の値を比較する式を作成することもできます。
タイム インテリジェンス関数の一覧については、「タイム インテリジェンス関数 (DAX)」を参照してください。 PowerPivot の分析で日付および時刻を効果的に使用する方法のヒントについては、「PowerPivot で使用する日付」を参照してください。
累計売上を計算する
次のトピックでは、決算残高と期首残高を計算する方法の例を紹介します。 この例によって、日、月、四半期、年などのさまざまな間隔で当座残高を作成できます。
CLOSINGBALANCEMONTH 関数, CLOSINGBALANCEQUARTER 関数, CLOSINGBALANCEYEAR 関数
OPENINGBALANCEMONTH 関数, OPENINGBALANCEQUARTER 関数, OPENINGBALANCEYEAR 関数
値を時系列で比較する
次のトピックでは、さまざまな期間の総計を比較する方法の例を紹介します。 DAX でサポートされている既定の期間は、月、四半期、および年です。
カスタムの日付範囲の値を計算する
セールス プロモーションの開始後 15 日間など、カスタムの日付範囲を取得する方法の例については、次のトピックを参照してください。
タイム インテリジェンス関数を使用して日付のカスタム セットを取得する場合は、計算を実行する関数への入力値としてその日付セットを使用して、期間のカスタム集計を作成できます。 これを行う方法の例については、次のトピックを参照してください。
注 |
---|
カスタムの日付範囲を指定する必要はなく、月、四半期、年など標準の事業単位を使用して作業している場合は、この目的のために設計された TOTALQTD、TOTALMTD、TOTALQTD などのタイム インテリジェンス関数を使用して計算を行うことをお勧めします。 |
トップに戻る
シナリオ: 値の順位付けと比較
列またはピボットテーブルで上位から任意の数のアイテムだけを表示するには、いくつかの方法があります。
Excel 2010 の機能を使用して、上位フィルターを作成できます。 または、ピボットテーブルで上位または下位から複数の値を選択できます。 このセクションの前半では、ピボットテーブルでフィルター処理を行って上位 10 個のアイテムを表示する方法について説明します。 詳細については Excel のドキュメントを参照してください。
値の順位付けを動的に行う式を作成してから、順位値によってフィルター処理を行うか、または順位値をスライサーとして使用することができます。 後半では、この式を作成してからその順位付けをスライサーで使用する方法について説明します。
どちらの方法にも利点と欠点があります。
Excel の上位フィルターは簡単に使用できますが、このフィルターは表示目的だけのためにあります。 ピボットテーブルの基になるデータが変更された場合は、変更を反映するため、手動でピボットテーブルを更新する必要があります。 順位付けを動的に使用する必要がある場合は、DAX を使用して、列内の値を比較する数式を作成できます。
DAX の数式はより強力で、スライサーに順位値を追加することによって、スライサー上をクリックするだけで表示する上位の値の数を変更できます。 ただし、この計算は計算コストが高いので、行が多数あるテーブルには適さない可能性があります。
ピボットテーブルで上位 10 個のアイテムだけを表示する
ピボットテーブルで上位または下位の値を表示するには |
||||||||
|
式を使用してアイテムの順序を動的に変更する
次のトピックでは、DAX を使用して順位付けを作成し計算列に格納する方法の例を紹介します。 DAX 数式は動的に計算されるため、基になるデータが変更された場合でも、常に正しい順位が返されます。 また、式は計算列内で使用されるため、順位付けをスライサーで使用して、上位 5 件、上位 10 件、さらに上位 100 件の値を選択できます。
トップに戻る