惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
量子位
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - Franky
美团技术团队
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
罗磊的独立博客
Jina AI
Jina AI
小众软件
小众软件
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
博客园 - 聂微东
博客园_首页
The Cloudflare Blog
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Фильтры в Apache Superset. Кросс-фильтрация
Трофим Воробьев · 2026-06-23 · via Все публикации подряд на Хабре

Простой

3 мин

4

Сегодня разберемся, что такое кросс-фильтрация в Apache Superset и какую неожиданную опасность она может нести.

Помимо классических фильтров, позволяющих пользователю вводить/выбирать нужные значения, существуют также и кросс-фильтры. Они позволяют связывать виджеты на дашборде без использования фильтров. Проще взглянуть на пример классического для Apache Superset дашборда COVID Vaccine Dashboard:

В данном примере пользователь нажал (и вот как правило случайно) на ячейку пирога, и у бар-чарта автоматически перестроился график.

Механизм очень простой:

  • пользователь нажал на ячейку

  • суперсет запомнил, что пользователь выделил, на уровне датасета. Проще представить, что он перевел это в классический SQL-фильтр. В данном случае это WHERE stage_of_development in ('2. Phase II or Combined I/II')

  • затем во всех виджетах на дашборде (на конкретном листе, в данном случае он один) он пытается этот фильтр применить. Для этого он лезет в датасет каждого виджета и, если в нем есть колонка stage_of_development, добавляет условие WHERE stage_of_development in ('2. Phase II or Combined I/II'). Работает это именно по имени колонки.

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

Да, он привез кучу всего, но на самом деле это просто копипаст логики из чарта пирога, один в один.

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

Пользователь просто не знает про этот механизм

Представьте, что вы делали дашборд для человека, который далек от IT. И уж тем более от приколов суперсета. Ну, например, для ГД. Весьма занятого человека с кучей встреч, миллионом задач, диким стрессом и высочайшим уровнем ответственности. Одним словом — этому человеку абсолютно индифферентно (синоним подберете) на какую-то там суперсетовскую кросс-фильтрацию. Да и на того, кто этот дашборд делал. Ему просто срочно нужен отчет для важной встречи.

И вот в момент изучения цифр дашборда ГД, не зная про кросс-фильтры, нечаянно жамкнул на ячейку пирога. Все чарты, у которых в датасете есть колонка stage_of_development, перестроились. Откуда не знающему человеку знать, что произошло? Так и должно быть? А если он просто жамкнул и даже не заметил, что что-то произошло, ведь не всегда все чарты умещаются в экран?

Да, далеко за примером ходить не нужно, просто пролистаем ниже этот дашборд и взглянем на то, что нужно увидеть пользователю для того, чтобы понять, что к виджету применены какие-то фильтры:

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

Но постойте, а откуда там циферка 2? Мы же жамкнули всего один раз на ячейку пирога?

Количество кросс-фильтров не ограничено

Это был небольшой спойлер ко второй проблеме — количество кросс-фильтров не ограничено ничем и никак. Можно тыкнуть - можно и фильтр прокинуть. И даже если на этот виджет ты уже "тыкал", то при "тыке" на другой виджет с него пробросится фильтр на тот виджет, на который ты уже тыкал!

Да, все работает именно так, как на картинке. Без лишних слов, идем чинить проблему

Сброс всех кросс-фильтров

Представьте, что в процессе аналитики/истерики пользователь натыкал на дашборде несколько кросс-фильтров. Как их все найти? Неужели лазать по всем чартам и искать с куклой-вуду где там и что натыкано? — нет, к счастью.

Хорошая новость в том, что все кросс-фильтры собраны там же, где и обычные фильтры. Плохая же новость в том, что нет кнопки "удалить все" (хотя в последних версиях мб и завезли, не проверял). В общем, удаляем все, что тут есть, и продолжаем работать с дашбордом.

Отключаем кросс-фильтрацию

Если же хочется избежать этих невзгод вообще, то можно отключить кросс-фильтрацию.

  • Способ 1: радикальный. Отключаем кросс-фильтрацию в принципе как опцию. Для этого в конфиг в переменную FEATURE_FLAGS вносим запись "DASHBOARD_CROSS_FILTERS": True

  • Способ 2: умеренный. Отключаем кросс-фильтрацию для конкретного дашборда. Делается в том же меню, где и сброс кросс-фильтров (убираем галочку, и кросс-фильтрация отключается):

Заключение:

Сегодня мы познакомились со включенной по умолчанию и, казалось бы, полезной и безобидной функцией кросс-фильтров в Apache Superset. Но, если применить фантазию и щепотку любопытства, то окажется, что она может принести много вреда.

Конечно же, это далеко не единственный "казус". Если хотите знать Apache Superset без сюрпризов - добро пожаловать на курс автора статьи. По промокоду HABR_BEST предоставляется скидка 30% - Apache Superset: полный курс