RELATED и RELATEDTABLE в DAX: данные по существующим связям

RELATED приносит одно значение из связанной таблицы, RELATEDTABLE возвращает набор связанных строк. Обе функции работают только тогда, когда модель связана нормально.

Павел использует существующие мосты между связанными площадками, получая одно значение и набор строк
СУТЬ БЕЗ ШУМА

Самое главное — за секунды

Содержание статьи

Поймёте, когда использовать RELATED и RELATEDTABLE, проверите направление связи и не станете чинить формулой проблему модели данных.

В таблице продаж хранится ProductID, а название категории лежит в справочнике товаров. Нужно показать категорию рядом с продажей. Самый устойчивый путь — создать связь и использовать RELATED. Обратная задача: для одной категории получить связанные строки продаж. Здесь помогает RELATEDTABLE. Функции короткие, но они не заменяют модель. Если ключи грязные или связь неоднозначна, DAX не обязан угадывать, что автор имел в виду.

Что это значит простыми словами

RELATED идёт по существующей связи со стороны «много» к стороне «один» и возвращает одно значение. RELATEDTABLE идёт к связанным строкам и возвращает таблицу, которую можно передать COUNTROWS, SUMX или другой функции. LOOKUPVALUE ищет значение по условиям и бывает полезна без подходящей связи, но в нормальной звёздной модели связь обычно понятнее и быстрее для поддержки.

Формула и логика расчёта

Пример вычисляемого столбца: RELATED(Товары[Категория]). Пример количества продаж для товара: COUNTROWS(RELATEDTABLE(Продажи)). Чтобы функция работала предсказуемо, в справочнике должен быть уникальный ключ, типы ключей должны совпадать, а связь — быть активной. RELATED не является аналогом объединения таблиц в Power Query: она использует модель после загрузки.

Подробный пример с числами

Павел соединяет множество заказов с уникальными товарами через мост отношений

В справочнике три товара: 101, 102 и 103. В продажах 1 000 строк, каждая содержит ProductID. Для товара 101 есть 420 строк продаж, для 102 — 350, для 103 — 230. RELATED добавит каждой строке продаж категорию из справочника. COUNTROWS(RELATEDTABLE(Продажи)) вернёт для товаров 420, 350 и 230. Если ProductID 103 случайно дважды присутствует в справочнике, сторона «один» перестаёт быть уникальной — сначала исправляем ключ, а не подбираем более хитрую формулу.

Сверьте количество уникальных ключей со строками справочника. Затем найдите строки факта без соответствия и пустые ключи. После этого добавьте простую таблицу «ключ — связанное значение — число строк». Такая проверка быстрее показывает проблему, чем чтение большой меры.

Как использовать в бизнесе

Качественные связи нужны не только ради DAX. Они закрепляют, что такое товар, клиент, договор и подразделение. В проектах я сначала договариваюсь о владельце справочника и правилах уникальности. Только потом добавляем вычисления. Иначе категория сегодня подтянулась, завтра задублировалась, а в отчёте неожиданно выросла выручка — очень бодрый график, но бизнесу от него не легче.

Когда применять этот подход

RELATED подходит, когда в строковом контексте нужно одно поле со стороны справочника: категорию товара, регион клиента или группу договора. RELATEDTABLE нужна, когда для текущей строки справочника надо получить связанные операции и затем их посчитать. Если связи нет и создавать её нельзя по объективной причине, LOOKUPVALUE может быть уместна, но это должно быть осознанное исключение.

Как проверить результат

Павел убирает дублирующийся ключ и проверяет направление связи к множеству строк

Для проверки возьмите пять ключей: обычный, с большим числом операций, без операций, отсутствующий в справочнике и потенциальный дубль. Посмотрите возвращённое значение и число связанных строк. Итоги по всем ключам должны объяснять число строк факта; необъяснённый остаток оформите отдельным показателем качества данных.

Как собрать расчёт по шагам

1. Проверьте ключ справочника

На стороне «один» не должно быть дублей и пустых значений.

2. Сверьте типы данных

Число и текст с одинаковым видом всё равно являются разными ключами.

3. Проверьте активную связь

Посмотрите кардинальность и направление фильтрации в модели.

4. Выберите функцию

RELATED — одно значение, RELATEDTABLE — набор связанных строк.

5. Сверьте контрольные записи

Возьмите несколько ключей и сравните результат с исходной системой.

Ограничения и типичные ошибки

  • Использовать RELATED при отсутствии активной связи.
  • Оставлять дубли на стороне «один».
  • Подменять модель множеством LOOKUPVALUE без объяснения.
  • Путать вычисление в модели с физическим Merge в Power Query.

После изменения модели проверьте контрольный набор вручную и запишите дату проверки. Если источник, связь или определение показателя изменились, старый результат уже нельзя молча сравнивать с новым.

Как я делаю это в проектах

Я держу отдельную страницу контроля модели: число строк без справочника, дубли ключей и несколько контрольных карточек по связям. При обновлении данных она показывает проблему раньше пользователей. Если новый товар ещё не попал в справочник, мы видим это как исключение и назначаем владельца. Так RELATED остаётся простой функцией, а не лотереей после каждого обновления.

Что сделать прямо сейчас

Выберите одну связь и посчитайте три числа: строки факта, уникальные ключи справочника и строки без соответствия.

Если хотите собрать расчёт вместе с моделью и нормальной проверкой данных, можно обсудить задачу с ФАНалитикой. Начнём с одного показателя и доведём его до решения, а не до ещё одной формулы в коллекции.

Первичные источники

ПО ТЕМЕ

Продолжить разбираться

Похожие материалы, которые развивают тему и помогают посмотреть на задачу с другой стороны.

Павел отдельно оценивает каждую коробку в ряду, а затем собирает результаты в общий итог
Управление5 мин435

SUMX в DAX: когда простой SUM уже не справляется

SUM складывает готовый столбец. SUMX проходит по строкам, считает выражение для каждой и только потом складывает результат. На этой разнице держится половина практики.

↗
Павел переставляет прозрачные фильтры перед одним расчётом и получает изменившийся результат
Управление5 мин389

CALCULATE в DAX: как меняется контекст фильтра

CALCULATE нужна, когда меру надо посчитать не в текущем наборе данных, а в специально изменённом контексте. Разберём это на продажах без магии и шаманства вокруг DAX.

↗

Можно просто написать

Познакомимся и обсудим задачу

Расскажите, что хотите улучшить или в чём пока не можете разобраться. Необязательно приходить с готовым ТЗ — вместе посмотрим на ситуацию и поймём, с чего начать.

Работаем без заявки.

Не оставляйте номер и не ждите звонка. Просто напишите сами туда, где вам удобно.