次の方法で共有


CALCULATE

適用対象:計算列計算テーブルMeasureビジュアル計算

変更された filter コンテキストで式を評価します。

手記

CALCULATETABLE 関数もあります。 まったく同じ機能を実行 テーブル オブジェクトを返す式に適用 コンテキストを変更します。

構文

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

パラメーター

用語 定義
expression 評価する式。
filter1, filter2,… (省略可能)ブール式 or、filters、orfilter 修飾子関数を定義するテーブル式です。

first パラメーターとして使用される式は、基本的に measureと同じです。

Filters は次のようになります。

  • ブール filter 式
  • テーブル filter 式
  • Filter 変更関数

複数の がある場合は、論理演算子 () を使用して評価できます。つまり、 条件は する必要があり、 () 論理演算子によって されます。つまり、どちらの条件も できます。

ブール filter 式

ブール式 filter は、TRUEorFALSEに評価される式です。 次の規則に従う必要があります。

  • 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 Amount 列 Sales テーブルの を評価します。 新しい filter が Product テーブルに追加 列 (or) では、filter は、列に既に適用されている filter を上書きします。

次の 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])
    )
)

関数は、変更された コンテキスト内の同じ式によって 、( コンテキスト内の) Sales Amount 列 Sales テーブルの合計を表す式を除算します。 これは、CALCULATE 修飾子関数である filter 関数を使用して REMOVEFILTERS コンテキストを変更する filter 関数です。 チャネルSales Order テーブルから 削除されます。

次の Customer テーブルの計算列定義は、顧客をロイヤルティ クラスに分類します。 これは非常に単純なシナリオです。顧客によって生成された収益が $2500 未満の場合、として分類されます。それ以外の場合は、高

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

この例では、行コンテキストが filter コンテキストに変換されます。 コンテキスト遷移と呼ばれます。 関数は、CustomerKey customer テーブル列 を削除します。

Filter コンテキスト行コンテキストCALCULATETABLE 関数Filter 関数