Записки охотника

Конструкции Related и Lookupvalue

Конструкции
Рвав-рвав,

сегодня мы рассмотрим использование таких конструкций, как «Related» и «Lookupvalue». При помощи данных функций можно присоединять данные, содержащиеся в разных таблицах, друг к другу.

Пример

Имеется базовый набор данных, содержащий только ID необходимых нам записей:
Базовый набор данных (таблица t_Dataset)
Для вашего удобства, на иллюстрациях мы будем отображать только часть информации, а именно первые 10 записей.
Дополнительно, у нас есть еще один набор данных, который является справочником, содержащим текстовое описание значений, присутствующих в наборе данных:
Справочник (таблица t_Breed)
Для вашего удобства, на иллюстрации показаны только те записи справочника, которые соответствуют только первым10 записям набора данных.
Рвав-рвав, если ключ записи отсутствует, не опускать хвост ни в коем разе, его всегда можно сделать самостоятельно, лишь бы данные обоих наборов были хоть как-то сопоставимы.

Задача

Дополнить набор данных текстовой информацией из справочника, используя в качестве ключа записи поле «Breed ID».

Функция RELATED

Данная функция работает только при наличии связей между данными, которые устанавливаются непосредственно на уровне модели:
Связь типа "Многие к одному" от справочника (таблица t_Breed) к набору данных (таблица t_Dataset) по полю Breed ID
При создании связей важен не только сам тип связи, но и ее направление,  примере показана самая простая связь с использованием ключевого поля «Breed ID».
После создания связи можно использовать конструкцию следующего вида:
Breed =
RELATED ( t_Breed[Breed] )
Результат работы формулы:
Добавление столбца Breed (таблица t_Dataset)
Рвав-рвав, если перед вами стоит более простая задача, а именно, собрать визуальный элемент, то наличие последнего шага – создание дополнительного столбца в базовом наборе данных при помощи DAX, не обязательно.

Функция LOOKUPVALUE

Данная функция работает более хитрым образом, при этом, непосредственное наличие связей между данными для ее работы не обязательно, поэтому, для чистоты эксперимента, настроенная ранее связь между справочником (таблица «t_Breed») и набором данных (таблица «t_Dataset») была удалена:
Отсутствие связей между между справочником (таблица t_Breed) и набором данных (таблица t_Dataset)
После удаления связи можно использовать конструкцию следующего вида:
Breed =
LOOKUPVALUE (
    t_Breed[Breed],
    t_Breed[Breed ID], t_Dataset[Breed ID]
)
Результат работы формулы:
Добавление столбца Breed (таблица t_Dataset)
Рвав-рвав, так что, товарищи, даже если в связи с особенностями вашей модели построить связи нельзя — это не является поводом для грусти!

Результат

В итоге, при помощи DAX, а именно функций «Related» и «Lookuovalue», исходный набор данных, содержащий только ID записи, был дополнен текстовым описанием из соответствующего справочника (столбец «Breed»).
Держу нос по ветру,

Ваш Смайл