CALCULATE
変更された filter コンテキストで式を評価します。
手記
CALCULATETABLE 関数もあります。 まったく同じ機能を実行
構文
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
パラメーター
用語 | 定義 |
---|---|
expression |
評価する式。 |
filter1, filter2,… |
(省略可能)ブール式 or、filters、orfilter 修飾子関数を定義するテーブル式です。 |
first パラメーターとして使用される式は、基本的に measureと同じです。
Filters は次のようになります。
- ブール filter 式
- テーブル filter 式
- Filter 変更関数
複数の
ブール filter 式
ブール式 filter は、TRUE
orFALSE
に評価される式です。 次の規則に従う必要があります。
- 1 つのテーブルの列を参照できます。
- メジャーを参照することはできません。
- 入れ子になった CALCULATE 関数を使用することはできません。
Power BI Desktop の 2021 年 9 月リリース以降は、次のことも適用されます。
- 集計関数に引数として渡されない限り、スキャン or テーブルを返す関数は使用できません。
- スカラー
を返す集計関数 含めることができる 。 例えば Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
テーブル filter 式
テーブル式 filter テーブル オブジェクトを filterとして適用します。 これはモデル テーブルへの参照である可能性がありますが、テーブル オブジェクトを返す関数である可能性が高くなります。 FILTER 関数を使用すると、ブール filter 式で定義できない条件を含む、複雑な filter 条件を適用できます。
Filter 修飾子関数
Filter 修飾子関数を使用すると、単に filtersを追加する以上のことを行うことができます。 コンテキストを変更するときに、追加の制御 filter 提供されます。
機能 | 目的 |
---|---|
REMOVEFILTERS | 1 つのテーブル all 1 つの列から filtersorfiltersor、or、1 つのテーブルの all 列から削除します。 |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | 1 つの列 filters 複数の列から or を削除 or、1 つのテーブルの all 列から削除します。 |
KEEPFILTERS | 同じ列の既存の filter を削除せずに filters を追加します。 |
USERELATIONSHIP | related 列間に非アクティブなリレーションシップを適用します。その場合、アクティブなリレーションシップは自動的に非アクティブになります。 |
CROSSFILTER | リレーションシップ filter 無効に or 方向 (両方から単一、or の両方) を変更します。 |
1ALL 関数 and、そのバリアントは、テーブル オブジェクトを返す関数として filterand 修飾子の両方として動作します。 If 関数がツールでサポートされている REMOVEFILTERS は、それを使用して filtersを削除することをお勧めします。
value を返す
式の結果である value。
備考
filter 式を指定すると、CALCULATE 関数は filter コンテキストを変更して式を evaluate します。 filter 式ごとに、filter 式が not 関数でラップ KEEPFILTERS 場合、次の 2 つの標準的な結果が得られます。
- 列 (If テーブル) が or コンテキストにない filter、新しい filters が filter コンテキストに追加され、式が evaluate されます。
- 列 (If テーブル) が既に or コンテキストにある filter、既存の filters は新しい filters によって上書きされ、evaluate 式が CALCULATE されます。
なしで 使用される 関数は、特定の要件を達成します。 行コンテキストが filter コンテキストに遷移します。 これは、モデル データを集計する式 (モデル notmeasure) を行コンテキストで評価する必要がある場合に必要です。 このシナリオは、反復子関数の式が評価されるときに or 計算列の数式で発生する可能性があります。 モデル measure が行コンテキストで使用されている場合、コンテキスト遷移は自動的に行われます。 この関数は、行レベル セキュリティ (RLS) 規則 not 計算列で使用する場合に、DirectQuery モードで使用するためにサポート or。
例
次の Sales テーブル measure 定義では、青色の製品に対してのみ収益の結果が生成されます。
この記事の例は、sample Adventure Works DW 2020 Power BI Desktop モデルで使用できます。 モデルを取得するには、モデル
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
カテゴリ | 売上金額 | 青い収益 |
---|---|---|
小物 | $1,272,057.89 | $165,406.62 |
バイク | $94,620,526.21 | $8,374,313.88 |
衣類 | $2,117,613.45 | $259,488.37 |
コンポーネント | $11,799,076.66 | $803,642.10 |
Total | $109,809,274.20 | $9,602,850.97 |
次の Sales テーブル measure 定義では、all 販売チャネルの売上に対する売上の比率が生成されます。
チャンネル | 売上金額 | 収益 % 合計チャネル数 |
---|---|---|
インターネット | $29,358,677.22 | 26.74% |
リセラー | $80,450,596.98 | 73.26% |
Total | $109,809,274.20 | 100.00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
次の Customer テーブルの計算列定義は、顧客をロイヤルティ クラスに分類します。 これは非常に単純なシナリオです。顧客によって生成された収益が $2500 未満の場合、
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
この例では、行コンテキストが filter コンテキストに変換されます。
コンテキスト遷移と呼ばれます。