このセクションでは、次のシナリオでの DAX 式の使用を示す例へのリンクを示します。
-
複雑な計算の実行
-
テキストと日付の操作
-
条件付き値とエラーのテスト
-
タイム インテリジェンスの使用
-
値のランク付けと比較
この記事の内容
開始する
DAX Resource Center Wiki にアクセスすると、業界をリードする専門家や Microsoft が提供するブログ、サンプル、ホワイトペーパー、ビデオなど、DAX に関するあらゆる種類の情報を確認できます。
シナリオ: 複雑な計算を実行する
DAX 数式では、カスタム集計、フィルター処理、条件付き値の使用を含む複雑な計算を実行できます。 このセクションでは、カスタム計算を開始する方法の例を示します。
ピボットテーブルのカスタム計算を作成する
CALCULATE と CALCULATETABLE は、計算フィールドの定義に役立つ強力で柔軟な関数です。 これらの関数を使用すると、計算を実行するコンテキストを変更できます。 また、実行する集計または算術演算の種類をカスタマイズすることもできます。 例については、次のトピックを参照してください。
数式にフィルターを適用する
DAX 関数が引数としてテーブルを受け取るほとんどの場所では、通常、テーブル名の代わりに FILTER 関数を使用するか、関数引数の 1 つとしてフィルター式を指定することで、フィルター処理されたテーブルを渡すことができます。 次のトピックでは、フィルターを作成する方法と、フィルターが数式の結果に与える影響の例を示します。 詳細については、「 DAX 数式でデータをフィルター処理する」を参照してください。
FILTER 関数を使用すると、式を使用してフィルター条件を指定できますが、他の関数は空白の値を除外するように特別に設計されています。
フィルターを選択的に削除して動的比率を作成する
数式で動的フィルターを作成すると、次のような質問に簡単に回答できます。
-
現在の製品の売上の合計売上への貢献は何でしたか?
-
この部門は、他の部門と比較して、すべての営業年の合計利益にどの程度貢献していますか?
ピボットテーブルで使用する数式はピボットテーブル コンテキストの影響を受ける可能性がありますが、フィルターを追加または削除することでコンテキストを選択的に変更できます。 ALL トピックの例では、これを行う方法を示します。 すべてのリセラーの売上に対する特定のリセラーの売上比率を見つけるには、現在のコンテキストの値を ALL コンテキストの値で割って計算するメジャーを作成します。
ALLEXCEPT トピックでは、数式のフィルターを選択的にクリアする方法の例を示します。 どちらの例でも、ピボットテーブルの設計に応じて結果がどのように変化するかについて説明します。
比率とパーセンテージを計算する方法の他の例については、次のトピックを参照してください。
外側のループの値を使用する
DAX では、計算で現在のコンテキストの値を使用するだけでなく、関連する一連の計算を作成する際に、前のループの値を使用できます。 次のトピックでは、外部ループから値を参照する数式を構築する方法について説明します。 EARLIER 関数は、最大 2 レベルの入れ子になったループをサポートします。
行コンテキストと関連テーブルの詳細と、数式でこの概念を使用する方法については、「 DAX 数式のコンテキスト」を参照してください。
シナリオ: テキストと日付の操作
このセクションでは、テキストの操作、日付と時刻の値の抽出と作成、条件に基づく値の作成などの一般的なシナリオの例を含む DAX リファレンス トピックへのリンクを示します。
連結によるキー列の作成
PowerPivot では複合キーは許可されません。そのため、データ ソースに複合キーがある場合は、それらを 1 つのキー列に結合する必要がある場合があります。 次のトピックでは、複合キーに基づいて計算列を作成する方法の 1 つの例を示します。
テキスト日付から抽出された日付部分に基づいて日付を作成する
PowerPivot では、SQL Server の日付/時刻データ型を使用して日付を操作します。したがって、外部データに異なる形式の日付が含まれている場合 (たとえば、日付が PowerPivot データ エンジンで認識されない地域の日付形式で書き込まれている場合、またはデータで整数サロゲート キーを使用する場合は、DAX 数式を使用して日付部分を抽出し、有効な日付/時刻表現にパーツを作成する必要があります。
たとえば、整数として表され、テキスト文字列としてインポートされた日付の列がある場合は、次の数式を使用して文字列を日付/時刻値に変換できます。
=DATE(RIGHT([Value1],4),LEFT([Value1],2),MID([Value1],2))
値 1 |
結果 |
---|---|
01032009 |
1/3/2009 |
12132008 |
12/13/2008 |
06252007 |
6/25/2007 |
次のトピックでは、日付の抽出と作成に使用される関数の詳細について説明します。
カスタムの日付または数値の形式を定義する
標準の Windows テキスト形式のいずれかで表されていない日付または数値がデータに含まれている場合は、値が正しく処理されるようにカスタム形式を定義できます。 これらの形式は、値を文字列または文字列に変換するときに使用されます。 次のトピックでは、日付と数値の操作に使用できる定義済みの形式の詳細な一覧も示します。
数式を使用してデータ型を変更する
PowerPivotでは、出力のデータ型はソース列によって決定され、最適なデータ型は PowerPivotによって決定されるため、結果のデータ型を明示的に指定することはできません。 ただし、 PowerPivot によって実行される暗黙的なデータ型変換を使用して、出力データ型を操作できます。
-
日付または数値文字列を数値に変換するには、1.0 を乗算します。 たとえば、次の数式では、現在の日付から 3 日を差し引いた値を計算し、対応する整数値を出力します。
=(TODAY()-3)*1.0
-
日付、数値、または通貨の値を文字列に変換するには、値を空の文字列と連結します。 たとえば、次の数式は、今日の日付を文字列として返します。
=""& TODAY()
次の関数を使用して、特定のデータ型が確実に返されるようにすることもできます。
実数を整数に変換する
-
実数、整数、または日付を文字列に変換する
-
文字列を実数または日付に変換する
シナリオ: 条件付き値とエラーのテスト
Excel と同様に、DAX には、データ内の値をテストし、条件に基づいて別の値を返す関数があります。 たとえば、年間売上額に応じてリセラーに [優先] または [ 値] のいずれかのラベルを付ける計算列を作成できます。 値をテストする関数は、値の範囲または種類を確認して、予期しないデータ エラーが計算を中断しないようにするのにも役立ちます。
条件に基づいて値を作成する
入れ子になった IF 条件を使用して値をテストし、条件付きで新しい値を生成できます。 次のトピックでは、条件付き処理と条件付き値の簡単な例をいくつか示します。
数式内のエラーをテストする
Excel とは異なり、計算列の 1 行に有効な値を含め、別の行に無効な値を指定することはできません。 つまり、 PowerPivot 列の任意の部分にエラーがある場合、列全体にエラーのフラグが設定されるため、無効な値が発生する数式エラーを常に修正する必要があります。
たとえば、0 で除算する数式を作成すると、無限大の結果またはエラーが発生する可能性があります。 一部の数式は、関数が数値を予期したときに空白の値を検出した場合にも失敗します。 データ モデルの開発中は、メッセージをクリックして問題のトラブルシューティングを行えるように、エラーが表示されるようにすることをお勧めします。 ただし、ブックを発行するときは、予期しない値によって計算が失敗しないように、エラー処理を組み込む必要があります。
計算列にエラーが返されないようにするには、論理関数と情報関数の組み合わせを使用してエラーをテストし、常に有効な値を返します。 次のトピックでは、DAX でこれを行う方法の簡単な例を示します。
シナリオ: タイム インテリジェンスの使用
DAX タイム インテリジェンス関数には、データから日付または日付範囲を取得するのに役立つ関数が含まれています。 その後、これらの日付または日付範囲を使用して、同様の期間にわたって値を計算できます。 タイム インテリジェンス関数には、標準の日付間隔を使用する関数も含まれています。これにより、月、年、または四半期間で値を比較できます。 指定した期間の最初と最後の日付の値を比較する数式を作成することもできます。
すべてのタイム インテリジェンス関数の一覧については、「 タイム インテリジェンス関数 (DAX)」を参照してください。 PowerPivot 分析で日付と時刻を効果的に使用する方法のヒントについては、「 Power Pivot の日付」を参照してください。
累積売上の計算
次のトピックでは、決算残高と始値残高を計算する方法の例を示します。 この例では、日、月、四半期、年など、さまざまな間隔で実行中の残高を作成できます。
時間の経過に伴う値の比較
次のトピックでは、異なる期間の合計を比較する方法の例を示します。 DAX でサポートされる既定の期間は、月、四半期、年です。
カスタム日付範囲で値を計算する
販売促進の開始から最初の 15 日後など、カスタム日付範囲を取得する方法の例については、次のトピックを参照してください。
タイム インテリジェンス関数を使用してカスタムの日付セットを取得する場合は、その日付のセットを計算を実行する関数への入力として使用して、期間をまたいでカスタム集計を作成できます。 これを行う方法の例については、次のトピックを参照してください。
-
注: カスタム日付範囲を指定する必要はなく、月、四半期、年などの標準会計単位を使用している場合は、TOTALQTD、TOTALMTD、TOTALQTD など、この目的のために設計されたタイム インテリジェンス関数を使用して計算を実行することをお勧めします。
シナリオ: 値のランク付けと比較
列またはピボットテーブル内の上位 n 個の項目のみを表示するには、いくつかのオプションがあります。
-
Excel の機能を使用して、上位フィルターを作成できます。 ピボットテーブルでは、上または下の値の数を選択することもできます。 このセクションの最初の部分では、ピボットテーブル内の上位 10 項目をフィルター処理する方法について説明します。 詳細については、Excel のドキュメントを参照してください。
-
値を動的にランク付けする数式を作成し、ランク付け値でフィルター処理するか、ランク付け値をスライサーとして使用できます。 このセクションの 2 番目の部分では、この数式を作成し、スライサーでそのランク付けを使用する方法について説明します。
各方法には長所と短所があります。
-
Excel Top フィルターは使いやすいですが、フィルターは表示のみを目的とします。 ピボットテーブルの基になるデータが変更された場合は、ピボットテーブルを手動で更新して変更を確認する必要があります。 ランク付けを動的に操作する必要がある場合は、DAX を使用して、列内の他の値と値を比較する数式を作成できます。
-
DAX 数式の方が強力です。さらに、スライサーにランク付け値を追加することで、スライサーをクリックするだけで、表示される上位の値の数を変更できます。 ただし、計算は計算コストが高く、この方法は行数が多いテーブルには適していない場合があります。
ピボットテーブルの上位 10 個の項目のみを表示する
ピボットテーブルで上または下の値を表示するには
|
数式を使用してアイテムを動的に並べ替える
次のトピックでは、DAX を使用して、計算列に格納されるランク付けを作成する方法の例を示します。 DAX 数式は動的に計算されるため、基になるデータが変更された場合でも、ランク付けが正しいことを常に確認できます。 また、数式は計算列で使用されるため、スライサーでランク付けを使用し、上位 5、上位 10、または上位 100 の値を選択できます。