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