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 との一方向のリレーションシップがあります。
既定では、年別の販売製品数を取得することはできません。
年別製品数は、次の 2 つの方法によって取得できます。
リレーションシップに対して双方向のクロスフィルター処理を有効にする。 これにより、これら 2 つのテーブル間のすべてのデータに対するフィルターの動作が変わります。
CROSSFILTER 関数を使用して、このメジャーのみに対するリレーションシップの動作を変更する。
DAX を使用する場合、CROSSFILTER 関数を使って、リレーションシップで定義されている 2 つの列間のクロスフィルター処理の方向の動作を変更できます。 この場合、DAX 式はこのようになります。
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
メジャーの式で CROSSFILTER 関数を使用すると、次のような予期した結果が得られます。