USERELATIONSHIP
columnName1 と columnName2 の間に存在するリレーションシップとして、特定の計算で使用するリレーションシップを指定します。
構文
USERELATIONSHIP(<columnName1>,<columnName2>)
パラメーター
用語 | 定義 |
---|---|
columnName1 |
標準の DAX 構文と完全修飾を使用する既存の列の名前。通常は、使用するリレーションシップの多くの側を表します。引数が逆の順序で指定されている場合、関数はそれらを使用する前にそれらをスワップします。 この引数を式にすることはできません。 |
columnName2 |
標準の DAX 構文と完全修飾を使用する既存の列の名前。通常は、使用するリレーションシップの一方または参照側を表します。引数が逆の順序で指定されている場合、関数はそれらを使用する前にそれらをスワップします。 この引数を式にすることはできません。 |
戻り値
この関数は値を返しません。この関数では、計算の期間だけ、指定されたリレーションシップが有効になります。
解説
USERELATIONSHIP は、フィルターを引数として受け取る関数 (CALCULATE、CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD、TOTALQTD、TOTALYTD 関数など) でのみ使用できます。
メジャーが含まれるテーブルに対して行レベルのセキュリティが定義されている場合、USERELATIONSHIP は使用できません。 たとえば、行レベルのセキュリティが DimCustomer に対して定義されている場合、
CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey]))
はエラーを返します。USERELATIONSHIP では、モデル内の既存のリレーションシップが使用され、終了ポイント列によってリレーションシップが識別されます。
USERELATIONSHIPでは、リレーションシップの状態は重要ではありません。つまり、リレーションシップがアクティブかどうかが、関数の使用に影響しません。 リレーションシップが非アクティブな場合でも、そのリレーションシップが使用され、モデルに存在する可能性があるが、関数の引数には記載されていない他のアクティブなリレーションシップがオーバーライドされます。
引数として指定された列のいずれかがリレーションシップの一部ではない場合、または引数が異なるリレーションシップに属している場合は、エラーが返されます。
計算でテーブル A とテーブル B を結合するために複数のリレーションシップが必要な場合は、各リレーションシップを異なる USERELATIONSHIP 関数で指定する必要があります。
CALCULATE 式が入れ子で、複数の CALCULATE 式に USERELATIONSHIP 関数が含まれている場合、最も内側の USERELATIONSHIP が競合またはあいまいさの場合に優先されます。
最大 10 個の USERELATIONSHIP 関数を入れ子にすることができます。ただし、式の入れ子のレベルが深くなる場合があります。次のサンプル式は、3 レベル深く入れ子になっていますが、USERELATIONSHIPの場合は 2 つのみです:
=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))
。1 対 1 のリレーションシップの場合、USERELATIONSHIP はリレーションシップを一方向にのみアクティブ化します。 特に、フィルターは columnName2
テーブルから columnName1's テーブル にのみフローできます。 双方向のクロス フィルタリングが必要な場合は、同じ計算で反対の方向を持つ 2 つの USERELATIONSHIP を使用できます。 たとえば、「 CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K]))
」のように入力します。
例
次の例は、InternetSales テーブルと DateTime テーブル間の既定のアクティブなリレーションシップをオーバーライドする方法を示しています。 既定のリレーションシップは、InternetSales テーブルの OrderDate 列と DateTime テーブルの Date 列の間に存在します。
インターネット売上の合計を計算し、従来の OrderDate ではなく ShippingDate によるスライスを許可するには、次の式を使用してメジャー [InternetSales by ShippingDate] を作成します。
= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
InternetSales[ShipmentDate] と DateTime[Date] の間のリレーションシップが存在する必要があり、アクティブなリレーションシップにすることはできません。また、InternetSales[OrderDate] と DateTime[Date] の間にリレーションシップが存在し、アクティブなリレーションシップである必要があります。