В статье мы рассмотрим использование такой конструкции, как Userelationship. При помощи данной функции можно переопределить активную связь на время выполнение запроса, не перестраивая связи в модели.
Пример: Таблица “Данные по сотрудникам” содержит необходимые сведения о сотрудниках, а именно, ID сотрудника (например, менеджера по закупкам), некое значение (например, количество заказов), ID ответственного лица (пусть это будет куратор соответствующего менеджера):
Таблица “Справочник сотрудников” содержит ID сотрудника, и его фамилию:
Задача: Подтянуть в таблицу “Данные по сотрудникам” фамилии как сотрудников, так и ответственных лиц. Безусловно есть много неспортивных способов выполнения поступившего запроса (например, с использованием функции Switch, условного столбца в Power Query и пр.), но поскольку это не интересно и не универсально, мы это, не рассматриваем.
Получение значения “Фамилия сотрудника”: Тут все просто, необходимо настроить нужную связь на уровне модели по полю “ID_Сотрудника”:
Дальше можно переходить непосредственно к созданию расчетного столбца в таблице “Данные по сотрудникам”, используя следующую формулу: Фамилия_Cотрудника = RELATED ( 'Справочник сотрудников'[Фамилия] ) Затем можно проверить получившийся результат:
Получение значения “Фамилия ответственного”: Необходимо настроить вторую связь на уровне модели по полю “ID_Ответственного”, при этом то, что она будет неактивной – это нормально:
Дальше можно переходить непосредственно к созданию расчетного столбца в таблице “Данные по сотрудникам”, используя следующую формулу: Фамилия_Ответственного = CALCULATE ( MINX ( 'Данные по сотрудникам', RELATED ( 'Справочник сотрудников'[Фамилия] ) ), ALL ( 'Справочник сотрудников' ), USERELATIONSHIP ( 'Данные по сотрудникам'[ID_Ответственного], 'Справочник сотрудников'[ID_Сотрудника] ) )