TGViewer
FineBI в России FineBI в России @finebi_ru · 937 subscribers
Post #1083 110
Объединение таблиц в FineBI размножает показатели при неуникальном ключе

Объединение таблиц «слева-справа» в FineBI выглядит как способ поставить две таблицы рядом. Работает оно как join по строкам, и при неуникальном ключе показатели копируются, а итог после суммирования выходит неверным.

На форуме FanRuan это всплыло в двух вопросах пользователей FineBI. В первом продажи хранятся построчно по заказам и уже сведены в среднедневные продажи по артикулу (SKU), а остатки лежат отдельной сводной таблицей по SKU, без заказов. Нужен отчёт об оборачиваемости запасов, но прямое объединение двух таблиц даёт проблемы. Во втором хотели показать рядом две таблицы показателей с одинаковыми измерениями.

Способы объединения в FineBI повторяют SQL: левое работает как left join, правое как right join, пересечение как inner join, полное как full join. Это объединение на уровне строк. Если значение ключа встречается несколько раз, строки второй таблицы копируются под каждое совпадение.

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

Копия измерения анализу не вредит. Копия показателя после суммирования даёт неверный итог. Хуже всего при связи «многие ко многим».

Ещё две детали ключа легко пропустить. Поля с одинаковыми именами FineBI сам добавляет в условие объединения. А пустые значения (null) в ключе друг с другом не совпадают, и строки с ними теряются. Источник предлагает заменить null, например, на «0». Я бы делал это осторожно: если пустых ключей с каждой стороны несколько или «0» уже встречается как настоящий код, замена сама даст «многие ко многим».

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

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

А когда оба показателя из одной таблицы, склейка не нужна совсем: в кросс-таблице задают измерение и кладут оба показателя рядом.

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

Вопросы на форуме FanRuan: https://bbs.fanruan.com/wenda/question/231737.html и https://bbs.fanruan.com/wenda/question/231767.html

#FineBI #FanRuan #BI #моделированиеданных #аналитикаданных #бизнесаналитика
More from @finebi_ru
  1. Sep 28, 2026Post #1084
  2. Sep 27, 2026Перейти с Apache Superset - не значит просто перенести дашборды 23 сентября вышла новость…
  3. Sep 25, 2026#дайджест Неделя, когда BI стал предсказуемее 🔍 Всем привет! Коротко о главном: FineBI на…
  4. Sep 25, 2026Post #1080
  5. Sep 25, 2026Как понять, что команда действительно готова работать в FineBI Доступы выданы, вводная вст…
  6. Sep 24, 2026Тем временем в Китае уже вышел FineBI 7.0.13. Международной версии пока нет, но изменения…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →