USERELATIONSHIP

适用于:计算列计算表度量值视觉对象计算

指定要在特定计算中使用的关系,如 columnName1 与 columnName2 之间存在的关系。

语法

USERELATIONSHIP(<columnName1>,<columnName2>)  

parameters

术语 定义
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,但其中只有 2 个是 USERELATIONSHIP:=CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))

  • 对于 1 对 1 关系,USERELATIONSHIP 只会在一个方向激活关系。 具体而言,筛选器只能从 columnName2 的表流向 columnName1 的表。 如果需要双向交叉筛选,则同一计算中可以使用两个方向相反的 USERELATIONSHIP。 例如,CALCULATE(..., USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K]))

示例

以下示例显示如何覆盖 InternetSales 表和 DateTime 表之间的默认有效关系。 InternetSales 表中的 OrderDate 列与 DateTime 表中的 Date 列之间存在默认关系。

若要计算 Internet 销售的总和,并允许按 ShippingDate(而不是惯例的 OrderDate)进行切片,请使用以下表达式创建度量值 [InternetSales by ShippingDate]:

= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))  

InternetSales[ShipmentDate] 和 DateTime[Date] 之间的关系必须存在,并且不应为有效关系;此外,InternetSales[OrderDate] 和 DateTime[Date] 之间的关系应该存在,且应该是有效关系。