USERELATIONSHIP 函数 (DAX)

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

语法

USERELATIONSHIP(<columnName1>,<columnName2>)

参数

  • columnName1
    现有列的名称(使用标准 DAX 语法,并且通常是完全限定的),这通常表示要使用的关系的多方;如果以相反的顺序给出参数,则函数将交换这些参数,然后才使用它们。 此参数不能是表达式。

  • columnName2
    现有列的名称(使用标准 DAX 语法,并且通常是完全限定的),这通常表示要使用的关系的一方或查找方;如果以相反的顺序给出参数,则函数将交换这些参数,然后才使用它们。 此参数不能是表达式。

返回值

该函数不返回任何值;该函数只在计算过程中启用指定的关系。

注释

  1. USERELATIONSHIP 只能用在采用筛选器作为参数的函数中,例如:CALCULATE、CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD、TOTALQTD 和 TOTALYTD 函数。

  2. USERELATIONSHIP 使用模型中的现有关系,同时关系由其结束点列标识。

  3. 在 USERELATIONSHIP 中,关系的状态不重要;也即,关系是否处于活动状态不影响该函数的使用。 即使关系处于不活动状态,也会使用该关系,并且它覆盖模型中可能存在但在函数参数中未提及的任何其他活动的关系。

  4. 如果指定为参数中的任何列不是关系的一部分,或者参数属于不同的关系,则会返回错误。

  5. 如果在计算中需要多个关系联接表 A 和表 B;则必须在其他 USERELATIONSHIP 函数中指定每个关系。

  6. 如果 CALCULATE 表达式是嵌套的,并且多个 CALCULATE 表达式包含 USERELATIONSHIP 函数,如有冲突或歧义,则会使用最内层的 USERELATIONSHIP。

  7. 最多可以嵌套 10 个 USERELATIONSHIP 函数;但是您的表达式可能具有更深的嵌套级别,也即, 以下示例表达式嵌套的深度为 3 个级别,但只有 2 个级别用于 USEREALTIONSHIP: =CALCULATE(CALCULATE( CALCULATE( <anyExpression>, USERELATIONSHIP( t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP( t1[colA], t2[colA]))。

示例

下面的示例演示如何覆盖 InternetSales 表和 DateTime 表之间的默认活动关系。 该默认关系存在于 InternetSales 表的 OrderDate 列和 DateTime 表的 Date 列之间。

若要计算 Internet 销售额之和,允许按照 ShippingDate(而不是传统的 OrderDate)进行划分,则需要使用下面的表达式创建度量值 [InternetSales by ShippingDate]:

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

在 PowerPivot 中:将新度量值拖至右窗格中的**“值”区域,将 InternetSales[ShippingDate] 列拖至“行标签”**区域;现在,就是按发货日期,而不是在这些示例中常见的按订单日期划分 Internet 销售额。

此示例要正常运行,InternetSales[ShipmentDate] 和 DateTime[Date] 之间的关系必须存在,并且不应是活动关系;另外,InternetSales[OrderDate] 和 DateTime[Date] 之间的关系也应存在,并且应当是活动关系。