1 / 20

Нарастающие итоги в MDX

Нарастающие итоги в MDX. Фёдор Самородов. Фёдор Самородов. Fedor@Samorodov.ru http://Samorodov.SU. Нарастающий итог – классика отчётного жанра. Считаем нарастающий итог средствами MDX. Дано: Многомерная база данных Календарная размерность

kosey
Download Presentation

Нарастающие итоги в MDX

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Нарастающие итоги в MDX Фёдор Самородов

  2. Фёдор Самородов • Fedor@Samorodov.ru • http://Samorodov.SU

  3. Нарастающий итог – классика отчётного жанра

  4. Считаем нарастающий итог средствами MDX Дано: • Многомерная база данных • Календарная размерность • Временная иерархия с нужной степенью гранулярности Требуется: • Просуммировать меру накопительным итогом • Результат представить в виде обыкновенного cellset’а

  5. Стратегия решения задачи • Запускаем скользящее окно вдоль временной иерархии • Привязка к текущей временной отметке через CurrentMember • Суммируем факты, вырезанные скользящим окном

  6. Метод № 1Простое скользящее окно • Нижняя граница окна фиксирована в «минус бесконечность» • NULL • Верхняя граница движется вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по диапазону между границами окна • Sum ({NULL:Размерность.Иерархия.CurrentMember}, …)

  7. Метод № 2PeriodsToDate • Используем стандартное накопительное скользящее окно • PeriodsToDate () • Общий родитель – корневой элемент (верхний уровень) • Размерность.Иерархия.[Верхний уровень].Level • Размер окна растёт вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по скользящему окну • Sum (PeriodsToDate (…), …)

  8. Метод № 3OpeningPeriod • Нижняя граница окна стоит на первой календарной отметке • OpeningPeriod (…, Размерность.Иерархия.[Верхний уровень]) • Верхняя граница движется вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по диапазону между границами окна • Sum ({OpeningPeriod (…):….CurrentMember}, …)

  9. Метод № 4FirstChild • Нижняя граница окна стоит на первой календарной отметке • Размерность.Иерархия.CurrentMember.FirstChild • Верхняя граница движется вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по диапазону между границами окна • Sum (….FirstChild:….CurrentMember, …)

  10. Метод № 5Item (0) • Нижняя граница окна стоит на первой календарной отметке • Размерность.Иерархия.CurrentMember.Level.Members.Item(0) • Верхняя граница движется вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по диапазону между границами окна • Sum (….Item (0):….CurrentMember, …)

  11. Метод № 6Parent + Item • Нижняя граница окна стоит на первой календарной отметке • ….CurrentMember.Parent.Item(0).Item (1) • Верхняя граница движется вдоль временной иерархии • Размерность.Иерархия.CurrentMember • Суммируем по диапазону между границами окна • Sum (….Parent.Item(0).Item (1):….CurrentMember, …)

  12. Новая стратегия решения • Не будем использовать скользящее окно • Перебираем элементы последовательно • Накапливаем итоговую сумму • Оформим рекурсию в секции WITH

  13. Метод № 7Рекурсия • Якорь рекурсии • Если это первый элемент, берём его значение • Шаг рекурсии • Суммируем текущий элемент с накопленным итогом • Запоминаем накопленный итог

  14. Ещё одна стратегия • Отранжируем множество по времени • Из отранжированного множества возьмём начало • Будем суммировать прошедший период

  15. Метод № 8Ранжирование • Ранжируем все значения по времени • Rank (…) • Выделяем прошедший период • Head (…) • Суммируем прошедший период • Sum (Head (…))

  16. Производительность

  17. Метод № 9Самый лучший метод • Работает быстрее всех предыдущих методов • Синтаксически – самый простой способ • Работает с любыми агрегатными функциями • в том числе с DistinctCount • Наилучший вариант для применения в реальных проектах

  18. Трёхдневный курс по MDX-запросамв Специалисте • Specialist.ru/Course/M50578A • Один из разделов курса посвящён операциям над календарём: • Работа с измерением времени • Множественные календари • Расходящиеся горизонты • Вычисляемые временные члены и агрегаты • Периоды: параллельные, открывающие, закрывающие… • Сравнение по периодам, расчёт тенденций

  19. В следующих серияхпро MDX-запросы • Полуаддитивные меры • Нестандартные агрегации • Проклятый DistinctCount!!! • Шаблоны и антишаблоны • Полезные приёмы для программирования индикаторов • Динамическое ограничение доступа • Существует ли «оптимизация MDX-запросов»? … и ещё много MDX-софткора и MDX-хардкора!

More Related