В статье «Мобильные панели мониторинга Datazen со службами аналитики и функцией детализации», опубликованной в предыдущем номере журнала, мы начали разговор о панелях мониторинга с функцией детализации, использующих запросы MDX и навигацию для передачи параметров запросу MDX.
В качестве источника данных я использовал базу данных текущей работы авиалиний бюро транспортной статистики. Такая база данных не самый простой вариант для загрузки и применения в демонстрационных целях, но я решил взять ее как пример реальных, понятных каждому данных о качестве работы. Мы начали со статистики задержек рейсов AirDelaysTabular в качестве источника данных для базы данных SSAS. На эти данные будет опираться табличный экземпляр SSAS на сервере разработки SQL Server 2014. Итак, продолжаем.
Фильтр для панели мониторинга
Навигаторы двух списков выбранных аэропортов получают данные от представлений Airports Med (средние аэропорты) и Large Hub (крупные узловые аэропорты). На странице Data View для элемента управления списком выбранных аэропортов вылета (Origin Airport) я указываю, что представление данных об эффективности работы аэропортов вылета и прилета Perf Origin Dest 2015 должно фильтроваться по этому списку (см. экран 1). То же представление будет фильтроваться по столбцу списка выбранных аэропортов назначения (Destination Airport).
![]() |
Экран 1. Страница Data View для элемента управления списком выбранных аэропортов вылета |
Остальные элементы управления привязаны к различным столбцам представления Perf Origin Dest 2015. Поскольку данные фильтруются на мобильном устройстве с использованием результата, находящегося в кэше, взаимодействие с элементами управления на панели мониторинга должно быть очень оперативным. На странице параметров панели мониторинга Dashboard Settings я указываю заголовок и имя файла: Origin and Destination Performance. Щелкаю правой кнопкой для публикации на сервере, затем еще раз — для сохранения локальной копии (я предпочитаю перестраховаться и всегда храню две копии), и, наконец, последний раз — для возврата на домашнюю страницу.
Панель детализации
На представлении данных следующей панели мониторинга, где будет отображаться детальная информация о работе аэропортов вылета и назначения (Performance Origin and Destination Detail), результаты будут фильтроваться по двум параметрам. Учитывая, что каждый год совершается примерно шесть миллионов внутренних рейсов, запрос, возвращающий любую возможную комбинацию аэропортов вылета и назначения, будет выполняться очень медленно. Более эффективное решение — передача этих значений как параметров для фильтрации результатов на сервере базы данных.
Начну с запроса с жестко запрограммированными аэропортами вылета и назначения для рейсов, следующих из Бостона в Сиэтл (см. листинг 1). Для добавления параметров на представление данных в качестве частоты обновления Refresh Frequency задан режим в реальном времени Real-time. При такой установке активируется ссылка на страницу определения параметров Define Parameters, где я добавляю параметры @DestinationCode (кодовое обозначение аэропорта назначения) и @OriginCode (кодовое обозначение аэропорта вылета), которым присваиваю значения по умолчанию для тестирования (см. экран 2).
![]() |
Экран 2. Страница определения параметров |
Этими параметрами я заменяю буквенные значения в запросе. При этом используются определенные обозначения. Datazen распознает параметр по двойным фигурным скобкам. Данное выражение прикрепляет значение параметра к ссылке на полноправный член (например, ‘[Origin]. [Airport].& [BOS]’), как показано в листинге 2. Тому, кто знаком с MDX, известно, что STRTOMEMBER — стандартная функция MDX, возвращающая член, указанный в строковом выражении. Если для вас это новость, просто запомните, что данная методика также широко используется с запросами MDX во многих других инструментах отчетности, таких как службы Reporting Services. В сущности, эта методика обеспечивает правильное выполнение запроса со значениями параметров.
Проектирование панели мониторинга, содержащей детальные данные об эффективности работы аэропортов вылета и прилета и использующей представление параметризованных данных, ничем не отличается от проектирования любой другой панели мониторинга, и это единственное представление данных, используемое данной панелью мониторинга.
Добавление навигации для перехода на панель детализации
Вернувшись на панель мониторинга эффективности аэропортов вылета и прилета (Origin and Destination Performance), на странице редактирования можно настроить переход на панель детализации для любого элемента управления (см. экран 3). Я выбрал числовой индикатор средней задержки вылета (Avg Departure Delay). На странице схематичного представления Layout View нажимаем кнопку целевой панели детализации Drill-through Target. После выбора панели мониторинга с данными об эффективности работы аэропортов вылета и прилета параметр @DestinationCode устанавливается в качестве свойства SelectedItem списка выбранных аэропортов назначения Destination Airport), а параметр @OriginCode — в качестве свойства SelectedItem списка выбранных аэропортов вылета Origin Airport. При выборе этого элемента управления передаются кодовые обозначения ранее выбранных аэропортов.
![]() |
Экран 3. Настройка перехода на панель детализации |
После публикации этих двух панелей мониторинга пользователи могут выбрать любые два аэропорта и узнать эффективность работы данной авиалинии за истекший год. Касанием значка детализации открывается та же выбранная комбинация вместе с элементом, позволяющим перейти на панель детализации, анализ которой позволит принимать обоснованные решения.
В заключение хочу подчеркнуть, что недавние усовершенствования продукта позволяют Datazen работать с запросами MDX в родном формате. Собирая измеряемые значения для элементов управления, Datazen обрабатывает пустые значения как нули, что нормально при суммировании, но может приводить к неточностям при вычислении средних значений. Такой образ действий, вероятнее всего, изменится; между тем на случай непредвиденных последствий можно принять соответствующие меры при составлении запроса и проектировании макета панели мониторинга.
Определяя целевую панель детализации, всегда выбирайте панель, опубликованную на сервере, а не ее локальную копию. Пару раз я допустил такую ошибку.
Datazen — новый член семейства продуктов Microsoft. Панель проста по конструктивному исполнению и не имеет той гибкости, которой обладают некоторые зрелые инструменты. Используйте данный вариант, если он вам подходит, но имейте в виду, что это не решение на все случаи жизни. По мере развития всей платформы бизнес-аналитики Microsoft изменения будут происходить неизбежно.
-- Perf by Date 2015 Param Origin Dest select { [Measures].[Avg Dep Delay], [Measures].[Avg Dep Delay Previous Year], [Measures].[Late Aircraft Delay], [Measures].[NAS Delay], [Measures].[Security Delay], [Measures].[Taxi Out Time], [Measures].[Weather Delay], [Measures].[Flight Count] } on columns, non empty ( [Date].[Date].[Date].Members, [Carrier].[CarrierName].[CarrierName].Members, [Origin].[Airport].&[BOS], [Destination].[Airport].&[SEA] ) on rows from [Model] where ( [Date].[Year].&[2015] );
-- Perf by Date 2015 Param Origin Dest select { [Measures].[Avg Dep Delay], [Measures].[Avg Dep Delay Previous Year], [Measures].[Late Aircraft Delay], [Measures].[NAS Delay], [Measures].[Security Delay], [Measures].[Taxi Out Time], [Measures].[Weather Delay], [Measures].[Flight Count] } on columns, non empty ( [Date].[Date].[Date].Members, [Carrier].[CarrierName].[CarrierName].Members, STRTOMEMBER( "[Origin].[Airport].&[" + '{{ @OriginCode }}' + "]" ), STRTOMEMBER( "[Destination].[Airport].&[" + '{{ @DestinationCode }}' + "]" ) ) on rows from [Model] where ( [Date].[Year].&[2015] );