Функции OVER

Функции OVER используются для определения способа среза данных, например относительно временных периодов.

Прим.: Использование функций OVER отличается для пользовательских выражений и для вычисляемых столбцов. В пользовательские выражения можно включать ссылки на оси, тогда как в вычисляемых столбцах можно ссылаться только на столбцы или фиксированные иерархии.

Дополнительные сведения см. в разделе Использование инструкции OVER для ссылки на срезы данных и Использование инструкции OVER в вычисляемых столбцах.

Параметр Описание
All Использует все узлы из указанной по ссылке иерархии. Это может быть полезно при пересечении текущего узла двумя или несколькими иерархиями. Например, можно показать относительные объемы продаж по разным категориям продуктов за каждый месяц.

Примеры пользовательских выражений:

Sum([Sales]) / Sum([Sales]) OVER (Intersect(All([Axis.Color]), [Axis.X]))

Sum([Sales]) / Sum([Sales]) OVER (All([Axis.X])) * 100

Примеры вычисляемых столбцов:

Sum([Sales]) OVER All([Date])

Max([Sales]) OVER Intersect([Category], All([Date]))

AllNext Использует все узлы, включая текущий, до конца уровня.

Пример пользовательского выражения:

Sum([Sales]) OVER (AllNext([Axis.X]))

Примеры вычисляемых столбцов:

Sum([Sales]) OVER AllNext([Date])

Max([Sales]) OVER Intersect([Category], AllNext([Date]))

AllPrevious Использует все узлы, включая текущий, с начала уровня. Может использоваться для вычисления нарастающего итога.

Примеры пользовательских выражений:

Sum([Sales]) OVER (AllPrevious([Axis.X]))

Sum([Sales]) OVER (Intersect(Parent([Axis.X]), AllPrevious([Axis.X])))

Примеры вычисляемых столбцов:

Sum([Sales]) OVER AllPrevious([Date])

Max([Sales]) OVER Intersect([Category], AllPrevious([Date]))

FirstNode Выбирает первый узел на текущем уровне.

Пример пользовательского выражения:

Sum([Sales]) - Sum([Sales]) OVER (FirstNode([Axis.X]))

Пример вычисляемого столбца:

Sum([Sales]) - Sum([Sales]) OVER (FirstNode([Hierarchy.TimeHierarchy]))

Intersect Возвращает пересеченные строки из узлов различных иерархий. См. также AllPrevious и All.

Пример пользовательского выражения:

Intersect(Parent([Axis.X]), All([Axis.Color]), Parent([Axis.Rows]), ...)

Пример вычисляемого столбца:

Sum([Sales]) OVER Intersect([Category], AllPrevious([Date]))

LastNode Выбирает последний узел на текущем уровне.

Пример пользовательского выражения:

Sum([Sales]) - Sum([Sales]) OVER (LastNode([Axis.X]))

Пример вычисляемого столбца:

Sum([Sales]) - Sum([Sales]) OVER (LastNode([Hierarchy.TimeHierarchy]))

LastPeriods Включает текущий узел и n - 1 предыдущих узлов. Можно использовать для вычисления скользящих средних.

Пример пользовательского выражения:

Sum([Sales]) OVER (LastPeriods(3, [Axis.X]))/3

Пример вычисляемого столбца:

Sum([Sales]) - Sum([Sales]) OVER (LastPeriods([Hierarchy.TimeHierarchy]))

NavigatePeriod Позволяет указать собственную навигацию по узлам. У этого метода четыре аргумента.

Arg1 — иерархия, по которой выполняется навигация.

Arg2 — строковое значение, указывающее уровень иерархии, до которого будет выполняться навигация.

Arg3 — целое число, указывающее число шагов, на которое следует переместиться в сторону по иерархии на уровне, заданном аргументом Arg1.

Arg4 — необязательный аргумент, определяющий нижний уровень иерархии, до которого может выполняться навигация. Этот аргумент можно опустить. Тогда выполняется переход на конечный уровень.

Примеры пользовательских выражений:

Sum([Sales]) OVER NavigatePeriod([Axis.X], "Year", -1)

Sum([Value]) OVER NavigatePeriod([Axis.X], "Year", 0, 0)

Sum([Sales]) OVER NavigatePeriod([Axis.X], 2, -1, 2)

Пример вычисляемого столбца:

Avg([Sales]) OVER (NavigatePeriod([Hierarchy.TimeHierarchy],0,-10)) - Avg([Sales])OVER (NavigatePeriod([Hierarchy.TimeHierarchy],0,10))

Next Сравнивает текущий узел со следующим узлом на одном уровне иерархии. Если следующего узла нет (если текущий узел — последний на текущем уровне), то в итоговом подмножестве не будет ни одной строки.

Примеры пользовательских выражений:

Sum([Sales]) - Sum([Sales]) OVER (Next([Axis.X]))

Count() OVER Next([Axis.X], 2)

Пример вычисляемого столбца:

Max([Sales]) OVER (Intersect([Category],Next([Year])))

NextPeriod Использует следующий узел, имеющий следующее значение на одном уровне иерархии, в качестве текущего узла. Если следующего узла нет (если текущий узел — последний на текущем уровне), то в итоговом подмножестве не будет ни одной строки.

Примеры пользовательских выражений:

Sum([Sales]) OVER (NextPeriod([Axis.X]))

Count() OVER NextPeriod([Axis.X], 2)

Пример вычисляемого столбца:

Max([Sales]) OVER (Intersect([Category],NextPeriod([Year])))

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

Пример пользовательского выражения:

Sum([Sales])-Sum([Sales]) OVER (ParallelPeriod([Axis.X]))

Пример вычисляемого столбца:

Sum([Sales])-Sum([Sales]) OVER (ParallelPeriod([Hierarchy.TimeHierarchy]))

Parent Использует дочернее подмножество текущего узла. Если у узла нет родителя, в качестве подмножества используются все строки.

Примеры пользовательских выражений:

Sum([Sales]) / Sum([Sales]) OVER (Parent([Axis.Color]))

Sum([Sales]) / Sum([Sales]) OVER (Parent([Axis.X])) * 100

Avg([Sales]) OVER Parent([Axis.X])

Пример вычисляемого столбца:

Sum([Sales]) OVER (Parent([Hierarchy.TimeHierarchy]))

Previous Использует предыдущий узел на том же уровне, на котором находится текущий узел, для сравнения результатов текущего узла с предыдущим. Если предыдущего узла нет (если текущий узел является первым на текущем уровне), то в итоговом подмножестве не будет ни одной строки.

Примеры пользовательских выражений:

Sum([Sales]) - Sum([Sales]) OVER (Previous([Axis.X]))

Count() OVER Previous([Axis.X], 2)

Пример вычисляемого столбца:

Max([Sales]) OVER (Intersect([Category],Previous([Year])))

PreviousPeriod Использует предыдущий узел, имеющий предыдущее значение, на одном уровне иерархии в качестве текущего узла. Если предыдущего узла нет (если текущий узел является первым на текущем уровне), то в итоговом подмножестве не будет ни одной строки.

Примеры пользовательских выражений:

Sum([Sales]) OVER (PreviousPeriod([Axis.X]))

Count() OVER PreviousPeriod([Axis.X], 2)

Пример вычисляемого столбца:

Max([Sales]) OVER (Intersect([Category],PreviousPeriod([Year])))

Также см. раздел Функции.