CALCULATETABLE

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

変更されたフィルター コンテキストでテーブル式を評価します。

注意

CALCULATE 関数もあります。 "スカラー値" を返す式に適用されるフィルター コンテキストを変更することを除き、まったく同じ機能を実行します。

構文

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

パラメーター

用語 定義
expression 評価の対象となるテーブル式。
filter1, filter2,… (省略可能) フィルターを定義するブール式またはテーブル式、あるいはフィルター変更関数。

第 1 パラメーターに使用する式は、モデル テーブルであるか、テーブルを返す関数である必要があります。

フィルターには以下を指定できます。

  • ブール型フィルター式
  • テーブル フィルター式
  • フィルター変更関数

複数のフィルターがある場合は、AND 論理演算子 を使用して評価されます。 つまり、すべての条件が同時に TRUE である必要があります。

ブール型フィルター式

ブール式フィルターとは、TRUE または FALSE に評価される式です。 遵守する必要がある規則がいくつかあります。

  • 1 つの列のみを参照できます。
  • メジャーを参照することはできません。
  • CALCULATE 関数を入れ子にして使用することはできません。

Power BI Desktop の 2021 年 9 月のリリース以降では、次も当てはまります。

  • 集計関数への引数として渡されない限り、テーブルをスキャンまたは返す関数を使用することはできません。
  • スカラー値を返す集計関数を含めることは "可能です"。

テーブル フィルター式

テーブル式フィルターでは、テーブル オブジェクトがフィルターとして適用されます。 モデル テーブルへの参照は可能ですが、多くの場合は、テーブル オブジェクトを返す関数です。 FILTER 関数を使用すると、ブール型フィルター式で定義できない複雑なフィルター条件を適用できます。

フィルター変更関数

フィルター変更関数を使用すると、単にフィルターを追加するだけでなく、さらに多くのことができます。 フィルター コンテキストを変更する際の追加の制御を提供します。

機能 目的
REMOVEFILTERS テーブルの 1 つ以上の列から、または 1 つのテーブルのすべての列から、すべてのフィルターまたはいくつかのフィルターを削除します。
ALL1ALLEXCEPTALLNOBLANKROW 1 つ以上の列から、または 1 つのテーブルのすべての列からフィルターを削除します。
KEEPFILTERS 同じ列の既存のフィルターを削除せずに、フィルターを追加します。
USERELATIONSHIP 関連する列の間に非アクティブなリレーションシップを使用します。この場合、アクティブなリレーションシップは自動的に非アクティブになります。
CROSSFILTER フィルターの方向を変更します (両方から単一または単一から両方)。または、リレーションシップを無効にします。

1 ALL およびその変形関数は、フィルター変更としても、テーブル オブジェクトを返す関数としても動作します。 お使いのツールで REMOVEFILTERS 関数がサポートされている場合は、これを使用してフィルターを削除することをお勧めします。

戻り値

値のテーブル。

解説

  • フィルター式を指定した場合、CALCULATETABLE 関数により、フィルター コンテキストが変更され、式が評価されます。 フィルター式ごとに、フィルター式が KEEPFILTERS 関数でラップされていない場合、2 つの標準的な結果が考えられます。

    • 列 (またはテーブル) がフィルター コンテキストに含まれない場合は、新しいフィルターがフィルター コンテキストに追加され、式が評価されます。
    • 列 (またはテーブル) が既にフィルター コンテキスト内にある場合は、新しいフィルターによって既存のフィルターが上書きされ、CALCULATETABLE 式が評価されます。
  • この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。

次の例では、CALCULATETABLE 関数を使用して、2006 年のインターネット販売の合計を取得します。 この値は、2006 年のすべての売上に対するインターネット販売の比率を計算するために後で使用されます。

次の式を実行します。

= SUMX(
    CALCULATETABLE(
        'InternetSales_USD',
        'DateTime'[CalendarYear] = 2006
    ),
    [SalesAmount_USD]
)  

次の表に結果を示します。

行ラベル インターネットの SalesAmount_USD CALCULATETABLE で求めた 2006 年のインターネット販売 インターネット販売の 2006 年比
2005 $2,627,031.40 $5,681,440.58 0.46
2006 $5,681,440.58 $5,681,440.58 1.00
2007 $8,705,066.67 $5,681,440.58 1.53
2008 $9,041,288.80 $5,681,440.58 1.59
総計 $26,054,827.45 $5,681,440.58 4.59