次の方法で共有


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] の間にリレーションシップが存在し、アクティブなリレーションシップである必要があります。