USERELATIONSHIP
columnName1 と columnName2 の間に存在するリレーションシップとして特定の計算で使用するリレーションシップを指定します。
構文
USERELATIONSHIP(<columnName1>,<columnName2>)
パラメーター
用語 | 定義 |
---|---|
columnName1 | 標準 DAX 構文を使用する、完全修飾の既存の列の名前。これは通常、使用されるリレーションシップの多側を表します。引数が逆の順序で指定されている場合、関数ではそれらが使用される前に入れ替えられます。 この引数を式にすることはできません。 |
columnName2 | 標準 DAX 構文を使用する、完全修飾の既存の列の名前。これは、通常、使用されるリレーションシップの一側または参照側を表します。引数が逆の順序で指定されている場合、関数ではそれらが使用される前に交換されます。 この引数を式にすることはできません。 |
戻り値
この関数では値は返されません。計算の間、示されたリレーションシップのみが有効になります。
解説
USERELATIONSHIP は、フィルターを引数として受け取る関数でのみ使用できます。たとえば、CALCULATE、CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD、TOTALQTD および TOTALYTD の各関数です。
USERELATIONSHIP は、メジャーが含まれるテーブルに行レベル セキュリティが定義されているときは使用できません。 たとえば、
CALCULATE(SUM([SalesAmount]), USERELATIONSHIP(FactInternetSales[CustomerKey], DimCustomer[CustomerKey]))
の場合、DimCustomer に行レベル セキュリティが定義されている場合、エラーが返されます。USERELATIONSHIP では、モデル内の既存のリレーションシップを使用し、それらの終了点列でリレーションシップを識別します。
USERELATIONSHIP では、リレーションシップの状態は重要ではありません。つまり、リレーションシップがアクティブかどうかは、関数の使用に影響を与えません。 アクティブではない場合でも、リレーションシップは使用されたり、モデルには存在する可能性があるが関数の引数では言及されていない他のアクティブなリレーションシップをオーバーライドしたりします。
引数として名前が付けられた列のいずれかがリレーションシップの一部ではない場合、または引数が別のリレーションシップに属している場合は、エラーが返されます。
計算でテーブル A とテーブル B を結合するために複数のリレーションシップが必要になる場合、各リレーションシップを異なる USERELATIONSHIP 関数で示す必要があります。
CALCULATE 式が入れ子になっており、複数の CALCULATE 式に USERELATIONSHIP 関数が含まれていると、競合またはあいまいさが生じた場合に優先されるのは、最も内側の USERELATIONSHIP です。
最大 10 個の USERELATIONSHIP 関数を入れ子にすることができます。ただし、式の入れ子レベルの方が深くなることがあります。すなわち、サンプル式
=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))
の入れ子レベルは 3 ですが、USEREALTIONSHIP の場合、2 です。一対一のリレーションシップの場合、USERELATIONSHIP では一方向のリレーションシップのみがアクティブ化されます。 特に、フィルターについては columnName2 のテーブルから columnName1 のテーブルへのフローのみが可能になります。 双方向のクロスフィルター処理が必要な場合は、同じ計算で反対の方向性を持つ 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] の間にもリレーションシップが存在する必要があり、こちらはアクティブにする必要があります。