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 могут быть вложенными, однако выражение может иметь и более глубокий уровень вложенности. Так, следующий образец выражения имеет три уровня вложенности, но только два уровня с точки зрения 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. Связь по умолчанию существует между столбцом OrderDate в таблице InternetSales и столбцом Date в таблице DateTime.

Чтобы вычислить сумму продаж через Интернет и сделать возможным создание срезов с помощью ShippingDate вместо традиционной OrderDate, создайте меру [InternetSales by ShippingDate], используя следующее выражение:

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

Необходимо, чтобы между InternetSales[ShipmentDate] и DateTime[Date] существовали свези и эти связи не были активными. Кроме того, должна существовать активная связь между InternetSales[OrderDate] и DateTime[Date].