о визуализации данных и развитии BI-систем
канал в телеграмме | подборки | видео

Порядок операций при работе с Relationships

Статья подготовлена в рамках сериала «Залетай в BI»

В прошлом спринте Руслан делал дашборд в котором столкнулся с интересным поведением Табло

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

Так как в одном заказе может быть несколько позиций, то для соединения этих таблиц логично использовать Relationships (далее рилейшены или макароны :-P).

Предположим, что мы хотим посчитать продажи по производителю«PA». Простой способ — добавить поле Producer в фильтры и выбрать нужного производителя:

Всё работает, как мы ожидаем и показывается верное число — 550 рублей. Но что, если мы хотели бы посчитать продажи не через фильтр, а через отдельное расчетное поле вида IIF([Producer]=«PA»,[Total Sales],NULL)?
Например, такое могло бы пригодиться, чтобы была возможность выбирать производителя через использование параметра и нам нужно было сравнивать параметр с значением поля Producer. В этом случае мы получаем ошибку задвоения по количеству товаров в заказе:

Чтобы раскопать эту ошибку в реальном дашборде у меня ушло больше часа. Наверное ещё мало работаю с этим типом соединений и не набил себе шишек. Но, к сожалению, не нашёл в интернете подробного описания как технически работают рилейшены.

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

Какой-то порядок операций в квадрате =) Было бы круто найти технический алгоритм работы этих макарон. Кажется, что можно наделать незаметных ошибок, которые приведут к неверному результату. Будьте осторожны!

Подписаться на блог
Отправить
Поделиться
Запинить
 12429   2021   табло
Дальше