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 つのテーブルのすべての列から、すべてのフィルターまたはいくつかのフィルターを削除します。 |
ALL1、ALLEXCEPT、ALLNOBLANKROW | 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 |