CROSSFILTER

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

2 つの列の間に存在するリレーションシップの計算で使用される、クロスフィルター処理の方向を指定します。

構文

CROSSFILTER(<columnName1>, <columnName2>, <direction>)  

パラメーター

用語 定義
columnName1 標準 DAX 構文を使用する、完全修飾の既存の列の名前。これは通常、使用されるリレーションシップの多側を表します。引数が逆の順序で指定されている場合、関数ではそれらが使用される前に入れ替えられます。 この引数を式にすることはできません。
columnName2 標準 DAX 構文を使用する、完全修飾の既存の列の名前。これは、通常、使用されるリレーションシップの一側または参照側を表します。引数が逆の順序で指定されている場合、関数ではそれらが使用される前に交換されます。 この引数を式にすることはできません。
方向 使用されるクロスフィルター処理の方向。 次のいずれかである必要があります。

None - このリレーションシップに沿ったクロスフィルター処理は行われません

Both - いずれかの側のフィルターで他方の側がフィルター処理されます。

OneWay - リレーションシップの一方の側または参照側のフィルターで、もう一方の側がフィルター処理されます。 このオプションは、一対一のリレーションシップで使用することはできません。 多対多のリレーションシップではこのオプションを使用しないでください。どちらが参照側であるかが明確でないためです。代わりに OneWay_LeftFiltersRight または OneWay_RightFiltersLeft を使用してください。

OneWay_LeftFiltersRight - <columnName1> の側のフィルターによって、<columnName2> の側がフィルター処理されます。 このオプションは、一対一または多対一のリレーションシップでは使用できません。

OneWay_RightFiltersLeft - <columnName2> の側のフィルターによって、<columnName1> の側がフィルター処理されます。 このオプションは、一対一または多対一のリレーションシップでは使用できません。

戻り値

関数で値は返されません。関数では、クエリの期間中、示されたリレーションシップのクロスフィルター処理の方向のみが設定されます。

解説

  • 1:1 リレーションシップの場合、一方向と双方向に違いはありません。

  • CROSSFILTER は、フィルターを引数として受け取る関数でのみ使用できます。たとえば、CALCULATE、CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD、TOTALQTD および TOTALYTD の各関数です。

  • CROSSFILTER では、モデル内の既存のリレーションシップを使用し、それらの終了点列でリレーションシップを識別します。

  • CROSSFILTER では、リレーションシップのクロスフィルター処理の設定は重要ではありません。つまり、リレーションシップがモデルで一方向と両方向のどちらをフィルター処理するように設定されているかは、関数の使用法に影響しません。 CROSSFILTER では、既存のクロスフィルター処理の設定がオーバーライドされます。

  • 引数として名前が付けられた列のいずれかがリレーションシップの一部ではない場合、または引数が別のリレーションシップに属している場合は、エラーが返されます。

  • CALCULATE 式が入れ子になっており、複数の CALCULATE 式に CROSSFILTER 関数が含まれていると、競合またはあいまいさが生じた場合に優先されるのは、最も内側の CROSSFILTER です。

  • この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。

次のモデル図では、DimProduct と DimDate の両方に FactInternetSales との一方向のリレーションシップがあります。

CROSSFILTER_Examp_DiagView

既定では、年別の販売製品数を取得することはできません。

CROSSFILTER_Examp_PivotTable1

年別製品数は、次の 2 つの方法によって取得できます。

  • リレーションシップに対して双方向のクロスフィルター処理を有効にする。 これにより、これら 2 つのテーブル間のすべてのデータに対するフィルターの動作が変わります。

  • CROSSFILTER 関数を使用して、このメジャーのみに対するリレーションシップの動作を変更する。

DAX を使用する場合、CROSSFILTER 関数を使って、リレーションシップで定義されている 2 つの列間のクロスフィルター処理の方向の動作を変更できます。 この場合、DAX 式はこのようになります。

BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))

メジャーの式で CROSSFILTER 関数を使用すると、次のような予期した結果が得られます。

CROSSFILTER_Examp_PivotTable2