Report Builder с параметрами множественного выбора + SSAS
Инструменты: Bi report server, report builder, табличная модель SSAS
«Посчастливилось» мне приобрести в коллекцию задачу с параметрами, что не мог решить Power BI без создания доп. таблиц в модели данных. Пытаюсь блюсти чистоту и непорочность SSAS табличных моделей насколько возможно. Поэтому решилась на Report Builder. Обнаружила для себя пару открытий, которыми захотелось поделиться и послушать экспертов по не раскрытым мной вопросам.
Оказывается, в Report Builder можно создавать свои функции (ух-ты). Нужно было покрасить табличку градиентом, интернет подсказал создать собственную функцию для расчета цвета ячейки (вау). Если интересно, то уверена, вам не составит труда найти информацию по тому же пути. RB не устает меня удивлять.
Более подробно остановлюсь на параметрах отчета при работе с источником SSAS.
В целом, если ваш запрос простой, можно легко собрать выгрузку с параметрами несколькими щелчками мыши, мне же пришлось познакомиться с функцией RSCustomDaxFilter, которая используется для работы с параметрами множественного выбора. Но все по порядку.
Шаг 1
Создать подключение к источнику SSAS
Report Builder захотел работать со мной только через shared connection. Такой источник данных я создала на BI report server. Его и выбрала в списке доступных. Видимо, только так он может регулировать доступ к нему. Если есть примечания к этому пункту с радостью послушаю.
Шаг 2
Создать Dataset для наполнения параметра значениями
Выбираем источник данных, внедренный в отчет, и в дизайнере запроса перетаскиваем нужное поле для параметра в рабочую область.
В моем примере я создала dataset с датами отчета, производителями и продуктовыми группами для параметров
Шаг 3
Создать Параметры в этом же дереве объектов отчета и наполнить их результатами созданных dataset.
На Вкладке View можно выбрать для отображения блок Параметры и расположить их в нужном порядке для отчета.
Шаг 4
Создать DataSet с фактическими данными для отчета.
Для начала в DAX Studio был написан запрос, получающий нужный результат. Для параметров заложила фундамент в качестве табличных переменных, которые далее подставлялись как фильтр в основной запрос.
var pgs = TREATAS( {"Колбасы вареные", "Колбасы копченые"} , 'Продукты'[Продуктовая группа] )
var dates = DATESBETWEEN('Календарь'[Дата], DATE(2021,4,1),DATE(2021,9,1))В Report Builder создала dataset уже не через дизайнер, а в режиме запросов. Вставила код запроса из DaxStudio и приступила к замене части кода на параметры.
Поскольку мне было не понятно, как RB работает с множественными параметрами, я создала тестовый DataSet, где кнопочками накидала полей в dataset и указала ему фильтрацию параметром с множественным списком. Далее воспользовалась кнопкой режима запроса и ознакомилась с получившимся кодом. Он выглядел примерно так:
EVALUATE
SUMMARIZECOLUMNS(
'Продукты'[Производитель]
, RSCustomDaxFilter(
@ПродуктыПродуктоваягруппа
,EqualToCondition
,[Продукты].[Продуктовая группа]
,String
)
)Взяв этот код за основу пыталась RSCustomDaxFilter пропихнуть в Treatas моей табличной переменной pgs (выше). Не вышло. Поэтому финальный код для переменной pgs такой:
var pgs =
calculatetable(
values('Продукты'[Продуктовая группа])
, RSCustomDaxFilter(@pgs,EqualToCondition,[Продукты].[Продуктовая группа],String)
)Чтобы RB признал @pgs необходимо нажать на кнопку Параметры запроса и заполнить примерно так:
Шаг 5
Собрать красивый отчет. Но это уже другая история.
Еще из траблов. Не получилось воспользоваться кнопкой Run в RB. Ругался на права доступа. Но сохраненный на сервере он работал отлично. В целом не стала тратить время на поиск почему и как. Не так часто им пользуемся.