Урок 22 · 7 мин чтения

Связи в формулах: RELATED и RELATEDTABLE

Как мера дотягивается до соседней таблицы по связи — тянет значение со стороны «один» или собирает строки со стороны «многих».

Мы построили «звезду»: факт Продажи и справочники Товары, Регионы, Календарь, связанные «один ко многим». Связи нужны не только для фильтрации в отчёте — по ним можно ходить прямо в формуле. Для этого две функции: RELATED и RELATEDTABLE.

RELATED — тянем значение со стороны «один»

В таблице Продажи нет цены — она в справочнике Товары. Чтобы в строке продажи получить цену её товара, идём по связи функцией RELATED:

Выручка (из количества и цены) =
SUMX ( Продажи, Продажи[Количество] * RELATED ( Товары[Цена] ) )

Итератор стоит на строке продаж; RELATED(Товары[Цена]) переходит по связи к нужному товару и возвращает его цену. Так в факт «подтягивается» любой атрибут из справочника: бренд, категория, единица измерения.

Направление RELATED

RELATED работает со стороны «многих» к стороне «один»: из строки Продажи (многих) к одной строке Товары (один). Это естественно — у каждой продажи ровно один товар, поэтому и значение одно.

RELATEDTABLE — собираем строки со стороны «многих»

Обратная задача: стоя на товаре (сторона «один»), получить все его продажи (сторона «многих»). Это RELATEDTABLE — он возвращает связанную таблицу, по которой можно считать:

Сколько раз продавался товар =
COUNTROWS ( RELATEDTABLE ( Продажи ) )

Положите эту меру в таблицу по товарам — у каждого увидите число его продаж. RELATEDTABLE вернул для каждого товара его строки в Продажи, а COUNTROWS их посчитал.

Выручка по товару =
SUMX ( RELATEDTABLE ( Продажи ), Продажи[Сумма] )
RELATED ↔ RELATEDTABLE

RELATED возвращает одно значение (идём к «один»). RELATEDTABLE возвращает таблицу строк (идём к «многим»). Какую брать — зависит от того, с какой стороны связи вы стоите.

Когда они нужны, а когда нет

Чаще всего ходить по связям в формуле не требуется — обычная мера SUM(Продажи[Сумма]) сама уважает связи: поставили «Категория» из Товары в строки, и выручка разложилась по категориям без всякого RELATED. Связи работают «фоном».

RELATED/RELATEDTABLE нужны точечно: когда расчёт идёт построчно (внутри итератора) и в строке не хватает атрибута из соседней таблицы.

Не тяните то, что и так работает

Если выручка и так раскладывается по категории через обычную меру — не переписывайте её на RELATED. Эти функции — для построчных расчётов, а не замена нормальной фильтрации по «звезде».

Что дальше

Мы умеем считать, менять контекст, фильтровать и ходить по связям. Осталась самая «управленческая» группа — время: прошлый год, нарастающий итог с начала года, скользящее среднее. Следующий урок — time intelligence.

В строке таблицы Продажи нужно получить цену товара из справочника Товары. Что брать?
Вы стоите на стороне «многих» (продажа) и идёте к стороне «один» (товар) за одним значением — это RELATED. RELATEDTABLE вернул бы таблицу строк и нужен для обратного направления.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43