Подытоги и итоги сводных таблиц в Apache SuperSet: многоуровневая агрегация на ClickHouse (часть 1)
Korneva_AV 30 минут назад Объяснить с Подытоги и итоги сводных таблиц в Apache SuperSet: многоуровневая агрегация на ClickHouse (часть 1) 6 мин 873 Apache * Визуализация данных * Туториал Superset умеет строить сводные...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. Korneva_AV 30 минут назад Объяснить с Подытоги и итоги сводных таблиц в Apache SuperSet: многоуровневая агрегация на ClickHouse (часть 1) 6 мин 873 Apache * Визуализация данных * Туториал Superset умеет строить сводные таблицы, но при выводе подытогов и итогов (subtotals/total) в сводных таблицах с иерархически структурированной метрикой сталкиваешься с ограничением: из коробки можно строить только простые метрики. А если нужна процентная метрика с корректными подытогами и итогами — приходится искать обходные решения. В этой статье разберём, как обойти это ограничение на уровне обращения к БД (ClickHouse).
Я нашла два подхода: UNION и массивы. И начну с первого, детально разобрав решение именно через UNION. Разберем на примере расчета показателя Потери, %Потери, % = Потери, шт/Продажи, штЕсли мы построим итоги и подытоги стандартным функционалом SuperSet,стандартый функционал в SuperSetто в результате получим не совсем то, что нужно.
Технические детали
В подытогах/итогах сложатся уже рассчитанные значения по форматам, что не является корректным. вид таблицы при выводе итогов и подытогов с помощью функционала SupserSetКак обойти это ограничение я покажу на примере ClickHouse — у PostgreSQL тот же приём может не сработатьСчитаем показатель для каждого уровня:Дата-Регион-ФорматДата-Регион /*подытог*/Дата /*Итог*/И далее "схлопываем" через UNION Вид запроса:/*рассчитываем до Дата-Регион- Формат*/ SELECT DAY_ID AS PERIOD, REGION, FORMAT AS FRMT, Sum(LOST) AS LOST, Sum(SALE) AS SALE FROM temp. my_table WHERE DAY_ID BETWEEN CURDATE()-7 AND CURDATE() - 1 GROUP BY 1,2,3 /*рассчитываем подытог Дата-Регион, вместо формата прописываем слово «Итог» */ UNION ALL SELECT DAY_ID ASPERIOD, REGION, 'Итог' AS FRMT, Sum(LOST) AS LOST, Sum(SALE) AS SALE FROM temp.
my_table WHERE DAY_ID BETWEEN CURDATE()-7 AND CURDATE() - 1 GROUP BY 1,2,3 /*рассчитываем итог по компании, вместо формата ставим одинарные кавычки (внутри пусто), вместо региона прописываем «Итог по компании» */ UNION ALL SELECT DAY_ID AS PERIOD, 'Итог по компании' AS REGION, '' AS FRMT, Sum(LOST) AS LOST, Sum(SALE) AS SALE FROM temp. my_table WHERE DAY_ID BETWEEN CURDATE()-7 AND CURDATE() - 1 GROUP BY 1,2,3Нюансы. Когда мы прописываем «Итог» в Select-е, то поле имеет формат String, и если поле, которое вы объединяете имеет формат Int, например, то его надо преобразовать toString(MyColumn)Строим сводную таблицу:Сводная таблица при построении запроса через UNIONИтоги и подытоги рассчитались корректно, но таблица имеет не совсем правильный вид: "Итог" между форматами, а "Итог по компании" расположился под одним из округов.
Поправим это, использовав «Невидимый символ». Это не пробел, а именно символ. Можно в поисковик ввести Invisible symbol, перейти на предложенный сайт и там скопировать этот символ.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





