Вычисляемые факты в стандартных кубах
Продолжая тему кубов и вычисляемых показателей в кубах и отчетах, хотелось бы поподробнее рассмотреть один из этих инструментов. Чтобы вывести в отчете показатель, посчитанный на основе данных из базы, можно использовать вычисляемые факты куба (далее «вычфакт») или вычисляемые элементы в отчете. О вычисляемых фактах в кубе и пойдет речь в этой статье.
Вычисляемые факты куба или вычисляемые элементы в отчетах?
Чтобы при создании отчета сделать выбор в пользу того или иного инструмента, нужно иметь представление об особенностях каждого из них. Ниже перечислены преимущества вычисляемых фактов в кубах:
- В вычисляемых фактах, настроенных в кубе, можно использовать параметры куба, в отчетах такой возможности нет.
- При использовании вычфактов кубов есть возможность изменять данные других фактов, вычисляемые элементы же в отчетах лишь отображают рассчитанные по формуле показатели.
- В вычисляемых фактах куба можно использовать ряд специальных функций, аналогов которых нет в отчетах.
- Отношения, используемые в вычфактах в кубе, позволяют рассчитывать значения, отстающие на указанное количество шагов от текущего. Причем настроить такой сдвиг можно для любого измерения. В отчетах сдвиг настраивается только для календарного измерения.
Создание вычисляемых фактов в кубе
Вычисляемый факт представляет собой некую функцию, использующую значения других фактов: обычных или вычисляемых.
Для создания вычфакта в мастере стандартного куба следует перейти на страницу «Вычисляемые факты» и для факта, не привязанного к полю набора данных, указать выражение для вычисления.
Для составления выражения можно использовать имеющиеся параметры куба, отношения, другие факты и специальные функции.
Также в выражении может быть использована пользовательская функция, описанная в модуле или форме. Путь до пользовательской функции задается в следующем формате: [Идентификатор модуля/формы].[Наименование функции]. Доступ к данным куба, на основании которых может осуществляться расчет значения, осуществляется посредством класса CubeClass.
Отношения
Вычисляемые факты в кубах тесно связаны с таким инструментом, как Отношения.
Отношения позволяют построить выражение с учетом отметки по другим измерениям.
Значения отношения задаются с помощью установки соответствующих переключателей и задания значений:
- Нет. В качестве элемента справочника будет взят текущий.
- Уровней вверх. Результатом применения отношения будет элемент-владелец, отстоящий на указанное количество уровней от текущего элемента.
- Элементов назад. Результатом применения отношения будет элемент того же уровня, отстоящий на указанный порядковый номер от текущего элемента.
- Указанный элемент. При установке данного переключателя становится доступным раскрывающееся дерево справочника, в котором нужно выбрать конкретный элемент. Тогда независимо от текущей позиции в кубе, результатом применения отношения будет именно тот элемент.
- Выражение. Результатом применения отношения будет заданное выражение.
Предлагаю рассмотреть все вышеперечисленные возможности на примере наиболее часто встречающихся вычисляемых показателей.
Темп роста
Первый показатель, который мы рассмотрим, – это темп роста. Для многих расчет темпа роста – непростая задача. На самом деле с помощью вычфактов это сделать довольно легко.
Чтобы посчитать темп роста, помимо значения показателя за текущий период нужно иметь еще значение за какой-либо предыдущий (начальный) период времени. И тут нам на помощь приходят Отношения, которые задаются на соответствующей странице мастера.
Предположим, что у нас куб с календарем, который содержит уровень Годы, Кварталы и Месяцы. Данные у нас хранятся только в разрезе по месяцам. И в зависимости от того, относительно какого периода нам нужно узнать темп роста, настройки отношения будут меняться. Рассмотрим самые основные:
1. Темп роста относительно предыдущего периода текущего года.
В нашем примере это значение за предыдущий месяц. Для того чтобы его получить, нам нужно создать отношение для календарного измерения и указать, что нам нужно передвинуть значение на 1 элемент назад.
2. Темп роста относительно аналогичного периода прошлого года.
У нас это будет значение за тот же месяц, но в прошлом году. Так как в году 12 месяцев, то сдвиг уже пойдет на 12 элементов назад.
3. Темп роста относительно какого-то определенного периода.
Например, мы хотим узнать темп роста с начала работы нашей фирмы. Пусть это будет, к примеру, январь 2010 года. Тогда отношение будет выглядеть следующим образом:
Создадим любое из вышеперечисленных отношений для календарного справочника.
Теперь мы можем перейти к созданию вычфакта, который будет нам выводить темп роста относительно предыдущего месяца. Здесь BEFORE — идентификатор нашего отношения, [@1] — факт, привязанный к набору данных, возвращающий значение за текущий период времени.
Теперь усложним задачу – представим, что мы хотим увидеть значение за аналогичный период прошлого года не только в разрезе месячной динамики, но также квартальной и годовой (значения в кварталы и годы у нас агрегируются с месяцев). И здесь сложность в том, что для каждого уровня календаря сдвиг назад будет на разное количество элементов. Поэтому для каждого уровня создадим отдельное отношение, которое будет брать значение на 12 точек назад для месяцев и на 4 – для кварталов. Для уровня Годы будем брать значение за предыдущий год.
Для того чтобы получить уровень календаря, используем пользовательскую функцию на языке Fore.
Входным параметром данной функции является ключ календарного измерения куба.
В зависимости от уровня календаря, который нам вернет функция, в вычфакте мы будем использовать то или иное отношение. В этом случае выражение для вычфакта будет иметь следующий вид:
Накопительный итог
Еще одним показателем, который часто приходится выводить в отчетах, это накопительный (или нарастающий) итог. Данный показатель представляет собой сумму показателей с некоторого начального периода времени по текущий. То есть на примере месячной динамики: февраль=январь+февраль, март=январь+февраль+март, апрель= январь+февраль+март+апрель и т.д. Для расчета такого показателя в вычфактах есть специальные функции — SUM и SUM_S.
Функции имеют следующий синтаксис:
где F – показатель, L1 и L2 — наименования уровней. В качестве наименования уровней используются только строковые константы, обозначающие уровни календарного справочника: DAY, WEEK, MONTH, QUART, HYEAR, NINEMONTH, YEAR, ROOT.
Данные функции возвращают накопленную сумму факта F по уровню L1 в рамках периода накопления L2. Период накопления представляет собой уровень, в рамках которого происходит накопление. Накопление начинается заново с началом каждого периода. Главное отличие функций SUM и SUM_S в том, что SUM_S считает накопленную сумму только по отмеченным элементам.
Исходя из этого, если нам нужно посчитать накопительный итог по месяцам в рамках года, то функция будет иметь следующий вид:
Для каждого года накопление будет начинаться заново с начала года.
Аналогично, если накопительный итог нужно считать для различных уровней календаря, то нам на помощь опять придет пользовательская функция, описанная выше. Вычфакт тогда будет иметь следующий вид:
Помимо функций, считающих сумму, в вычфактах есть также ряд других специальных функций, подробнее с которыми можно ознакомиться в нашей онлайн-справке в разделе о кубах.
Это далеко не все возможности вычфактов в стандартных кубах. Но я постаралась описать здесь различные приемы, используя и комбинируя которые, можно посчитать даже самые сложные показатели.