Биты и байты.

Биты и байты.

четверг, 16 января 2014 г.

Ускоряем работу отчета SSRS. Кубический отчет.

С тех пор как оперативная память подешевела и все перешли на x64, активно развиваются технологии in-memory баз данных и BI систем (всем привет от Qlikview),
где проблемы с производительностью постепенно отпадают сами.
Поэтому задержка в отклике  работы отчета уже в минуту сейчас считается, серьезным поводом для оптимизации.
Благо для обычных отчетов SSRS всегда была доступна в качестве источника служба аналитики Analysis Services.
Сегодня попробуем сделать простой отчет используя технологии SSAS+ SSRS.

Предварительно должен быть развернут куб на сервере Analysis Services. Создаем источник в отчете для нашего куба


Создаем пустой лист отчета, в дизайнере запроса формируем наш запрос, если необходимо изменить запрос жмем
Соответствующую пиктограмму, для форматирования запроса лучше использовать MDX Beautifier


В итоге получаем MDX запрос следующего вида, если возникнут проблемы с флагом CONSTRAINED и будут возникать ошибки вида
Query (1, 1020) The restrictions imposed by the CONSTRAINED flag in the STRTOSET function were violated.
Рекомендую удалить этот флаг и условие WHERE, этот флаг защищает от Injection атак и проверяет чтобы в параметре были именно элементы измерения.

Эти 2 запроса эквиваленты
Добавляем кросс таблицу в отчет Matrix и приводим ее к следующему виду, в отчете будут указаны продажи по календарным годам для сотрудников,
с возможностью раскрытия данных по каждому сотруднику. 

Для этого настраиваем группировку для строк Employees, чтобы можно было разворачивать список по нажатию на +
1.группируем по имени [Employees.UniqueName]

2. настраиваем опцию рекурсивная группировка по полю [Employees.ParentUniqueName]
3. Настраиваем свойство видимости для группы
4.Задаем отступ для элементов группы в зависимости от уровня элементов в иерархии, Cstr(Fields!Employees.LevelNumber * 30) & "pt"
5. Форматируем показатель ### ### ### ##0.00

6. Проверяем результаты, запускаем наш тестовый отчет.  Видим появились 2 параметра. Строки группируются по +. Показатель отформатирован.

P/s также можно указать Drill down для элемента отчета
Обычный параметр передается по значению Param4.UniqueName
Чтобы передать в подотчет  multivalue параметр, необходимо составить такое выражение
=Split(Join(Parameters!Param1.Value,","),",")

И по старой традиции анекдот дня

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

About