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].