Excel-dax-performing-complex-calculations
Excel DAX-複雑な計算の実行
DAX数式は、カスタム集計、フィルタリング、および条件値の使用を伴う複雑な計算を実行できます。 あなたはDAXで次のことができます-
- ピボットテーブルのカスタム計算を作成します。
- DAX数式にフィルターを適用します。
- フィルタを選択的に削除して、動的な比率を作成します。
- 外側のループの値を使用します。
ピボットテーブルのカスタム計算の作成
DAX関数CALCULATEおよびCALCULATETABLEは強力で柔軟です。 計算フィールドの定義に役立ちます。 これらのDAX関数を使用すると、計算が実行されるコンテキストを変更できます。 実行する集計または数学演算のタイプをカスタマイズすることもできます。
CALCULATE関数
計算(<式>、[<フィルター1>]、[<フィルター2>]…)
CALCULATE関数は、指定された0個以上のフィルターによって変更されたコンテキストで、指定された式を評価します。
データがフィルター処理されている場合、CALCULATE関数はデータがフィルター処理されるコンテキストを変更し、フィルターで指定した新しいコンテキストで式を評価します。 つまり、指定した列の既存のフィルターはすべて削除され、代わりにフィルター引数で使用されているフィルターが適用されます。
例
国名でスポーツ的にフィルタリングされたメダルの割合を表示するとします。 計算では、ピボットテーブルのCountryに適用するフィルターをオーバーライドするパーセント値を取得する必要があります。
- 次のスクリーンショットに示すように、計算フィールド-メダル数の割合を定義します。
このDAX式では、ALL関数を含むフィルターを使用して、結果テーブルのすべての行がCALCULATE関数で考慮されます。 このように、分母に合計カウントがあります。
ピボットテーブルは、次のスクリーンショットのようになります。
上記のスクリーンショットでは、CountryはUSAにフィルターされ、Top18の値がピボットテーブルに表示されています。 次に、ピボットテーブルで値を動的にフィルター処理できます。 ただし、計算は、使用したカスタムDAX数式によって正確になります。
CALCULATETABLE関数は値のテーブルを取得し、CALCULATE関数と同じアクションを実行します。
数式でのデータのフィルタリング
DAX数式内にフィルターを作成して、計算で使用するソースデータから値を選択できます。 これを行うには、フィルター式を定義し、それをDAX数式への入力であるテーブルと共に使用します。
フィルター式を使用すると、ソースデータのサブセットを取得できます。 フィルターは、データの現在のコンテキストに応じて、DAX数式の結果を更新するたびに動的に適用され、正確で期待される結果を保証できます。
通常、フィルター式には、テーブルの選択された行のみを返すDAXフィルター関数が含まれており、データ集計に使用している別のDAX関数の引数として使用できます。
例
次のスクリーンショットは、夏季スポーツのメダルカウントのみを提供する計算フィールドの定義を示しています。
この計算フィールドでは、ピボットテーブルは次のスクリーンショットに示すようになります。
ご覧のように、新しい計算フィールドを持つ右側のピボットテーブルの値は、明示的に季節フィールドのフィルターを適用した左側のピボットテーブルの値と一致します。
注意-DAXフィルターおよび値関数はテーブルを返しますが、テーブルまたは行を直接データモデルに返さないため、常に別のDAX関数に埋め込まれます。
これらのDAX関数の詳細については、「DAXフィルター関数」の章を参照してください。
フィルターの動的な追加と削除
ピボットテーブルで使用するDAX数式は、ピボットテーブルコンテキストの影響を受ける可能性があります。 ただし、フィルターを追加または削除して、コンテキストを選択的に変更できます。 DAX関数ALLおよびALLEXCEPTを使用して、ピボットテーブルコンテキストに関係なく行を動的に選択できます。
さらに、個別の値を返すためにDAX関数DISTINCTおよびVALUESを使用できます。
外部ループの値を使用する
DAX EARLIER関数を使用して関連する一連の計算を作成する際に、前のループの値を使用できます。 このDAX関数は、最大2レベルのネストされたループをサポートします。