CROSSFILTER
2 つの列の間に存在するリレーションシップの計算で使用するクロスフィルターの方向を指定します。
構文
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
パラメーター
用語 | 定義 |
---|---|
columnName1 |
標準の DAX 構文と完全修飾を使用する既存の列の名前。通常は、使用するリレーションシップの多くの側を表します。引数が逆の順序で指定されている場合、関数はそれらを使用する前にそれらをスワップします。 この引数を式にすることはできません。 |
columnName2 |
標準の DAX 構文と完全修飾を使用する既存の列の名前。通常は、使用するリレーションシップの一方または参照側を表します。引数が逆の順序で指定されている場合、関数はそれらを使用する前にそれらをスワップします。 この引数を式にすることはできません。 |
Direction |
使用するクロスフィルターの方向。 次のいずれかである必要があります。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では、リレーションシップのクロスフィルター設定は重要ではありません。つまり、リレーションシップが 1 つをフィルター処理するように設定されているか、モデルの双方向に設定されているかは、関数の使用には影響しません。 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 関数を使用すると、期待される結果が得られます。