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

Введение
Представьте, что у нас есть три показателя:
- Сумма продаж
- Бюджет продаж Сумма Бюджет
- Сумма продаж (PY)
Если мы посмотрим на таблицу с этими цифрами, то увидим следующее (при условии, что у нас есть актуальные данные до конца июля 2025 года):
Хотя результаты верны, моим пользователям могут потребоваться два разных представления:
- Смотрите только результаты, полученные на основе имеющихся данных.
- Включая бюджетные данные и данные за предыдущий год.
У меня есть несколько способов это сделать:
- Создавайте отдельные визуализации с различными фильтрами.
- Создайте две страницы для двух представлений, снова используя разные фильтры.
- Посоветуйте моим пользователям использовать фильтр календаря для фильтрации данных по мере необходимости.
Но я хочу создавать отчеты максимально удобными для пользователей, избегая дублирования информации.
Поэтому я хочу добавить фильтр, чтобы пользователи могли выбирать, включать ли будущие данные или видеть только текущие.
Создайте таблицу фильтров по дате.
В моей таблице с датами есть столбцы-индексы для разных периодов: дни, недели, месяцы, кварталы и годы.
- В строке с текущим периодом содержится 0.
- В строках за прошлые периоды содержатся отрицательные числа.
- Строки для фьючерсных периодов содержат положительные числа.
Давайте посмотрим на строки небольшого примера, реализованного в SQL с использованием столбца DayIndex:
Используя этот столбец, я создал таблицу с дополнительным столбцом, который будет служить в качестве фильтра.
Я взял все строки с индексом до 0 и пометил их как «Только текущие данные».
Затем я объединил (UNION) все строки из таблицы Date и пометил их как «Включены будущие данные».
Я сделал это с помощью SQL, но вы можете сделать это в Power Query или любом другом языке программирования на ваш выбор.
Теперь я импортировал эту таблицу в Power BI.
Разверните модель данных
После добавления этой таблицы в Power BI я создал новую связь между новой таблицей и таблицей дат:
Для параметра «Направление перекрестной фильтрации» необходимо установить значение «Оба» , поскольку столбец DateKey в таблице фильтра дат не является уникальным:
Следовательно, направление фильтрации будет только «Дата» -> «Фильтр по дате», что не сработает.
Мне нужно отфильтровать таблицу дат по таблице фильтров дат. Поэтому я должен установить направление фильтрации на «Оба».
Результат
Далее я добавил в отчет срез:
После всех подготовительных работ инструмент Slicer позволяет выбрать необходимые данные:
Пользователи могут использовать этот фильтр для выбора отображаемых данных, независимо от выбора в фильтре календаря.
Выбор полных периодов
Приведенный выше пример практичен в тех случаях, когда выборка должна осуществляться на уровне дня.
Это особенно полезно при сравнении текущих данных с бюджетными или предыдущими годами.
Представьте, что на 5-й или 6-й день месяца у вас есть данные о продажах всего за несколько дней, но вы сравниваете их с бюджетом на весь месяц. Это может ввести в заблуждение.
Но что произойдет, если фильтр необходимо установить на целые периоды, например, месяцы или годы?
Здесь представлен модифицированный запрос для установки значения столбца DateFilter на основе целых лет:
Теперь отображается весь год, хотя должны отображаться только текущие данные:
Аналогичным образом вы можете изменить таблицу фильтров по датам, чтобы фильтровать данные по месяцам или другим периодам.
Это можно сделать очень легко, отфильтровав строки в таблице «Даты» по текущей дате.
Заключение
Этот подход прост в реализации и удобен для пользователей отчетов.
Это позволяет избежать написания кода DAX и полностью опирается на информацию из таблицы Date.
Главная задача — расширить модель данных для поддержки необходимых требований с минимальными усилиями.
Если у вас нет столбцов с индексами, как у меня, вы можете использовать другой подход для создания таблицы фильтра по дате. Например, используйте функцию для получения текущей даты, такую как GETDATE() в T-SQL или Now() в других языках.
Я нашел столбцы индекса очень полезными не только в этом случае, но и во многих других ситуациях, когда клиент требует от меня фильтрации данных по датам относительно текущей даты.
Это упрощает задачу, когда «текущая дата» не сегодняшняя, а должна соответствовать определенной логике — например, предыдущему рабочему дню.
Хорошо, вы можете добавить в отчет относительные фильтры. Во многих случаях этого достаточно.
В других случаях столбцы индекса предоставляют мне больше гибкости.
Ссылки
Как и в моих предыдущих статьях, я использую пример набора данных Contoso. Вы можете бесплатно скачать набор данных ContosoRetailDW с сайта Microsoft здесь.
Данные Contoso можно свободно использовать в соответствии с лицензией MIT, как описано в этом документе. Я изменил набор данных, чтобы привести данные к современным датам.
Источник: towardsdatascience.com
Похожие записи
Оцените материал:
Похожие записи
Технологическая отрасль находится в настоящем тарифном аду, даже если возврат средств будет автоматизирован.
09.03.2026
Открытие древней бактерии переписывает историю происхождения сифилиса.
26.01.2026
Grammarly меняет название на «Superhuman» и запускает нового помощника на основе искусственного интеллекта
31.10.2025Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
