В Power BI есть стандартные средства переключения временного периода — достаточно в оси добавить несколько вариантов. Но для конечных пользователей переключение между периодами в таком виде бывает не очевидно. Поэтому в данной статье будет рассмотрено как сделать переключение между периодами с помощью кнопок с названиями периодов.
Мы будем использовать календарь Максима Уварова, но в целом неважно какой календарь использовать.
Для начала нам нужно создать новую вычисляемую таблицу назовем ее _NewCalendar.
Таблица будет состоять из 5 полей:
- Date — нужно для связи с основным календарем
- Period — главное поле, здесь мы указываем периоды из основного календаря, которые и будут использоваться для оси.
- PeriodIndex — из-за того что в поле Period будут содержаться поля с разным типом, то это поле нужно для правильной сортировки, соответственно и заполнять его нужно согласно тому, какое поле вы бы использовали для правильной сортировки Period.
- Level — названия периодов, будут использоваться для фильтров-кнопок.
- LevelIndex для правильной сортировки Level, иначе сортировка будет по алфавиту.
После того как таблица была создана, необходимо настроить сортировку Period по PeriodIndex и сортировку Level по LevelIndex. Выбираем справа столбик Period, на вкладке Modeling -> Sort by Column.
Также необходимо связать новый календарь с основным. Связь — двунаправленная.
Создаем фильтр по Level. Лучше сразу разрешить только одиночный выбор в настройках.
Создаем визуализацию, где осью указываем Period из нашего нового календаря. Сортировку визуализации выбираем по Period.
Добавляем что собственно будет выступать данными — в нашем случае клики по линиями и расход по столбцам.
Для удобства можно добавить еще фильтр по датам основного календаря.
Ну собственно и всё.
P/S
Горизонтальный скролл, который появляется при выборе «по дням» и которого нет, если указать Date (без иерархии) как ось, возникает из-за того, что поле Period имеет фактически текстовый тип, в отличии от поле Date, который является датой. Как сделать так, чтобы тип менялся в зависимости от выбранного диапазона, я еще не придумал, но есть подозрение, что это возможно реализовать.