Внутренние и внешние выражения множества
Выражения множества могут использоваться во внутренних и внешних функциях агрегирования и заключаются в фигурные скобки.
Когда выражение множества используется внутри функции агрегирования, оно может выглядеть следующим образом:
Пример: Внутреннее выражение множества
Sum( {$<Year={2021}>} Sales )
Используйте выражение множества вне функции агрегирования, если имеются выражения с несколькими агрегированиями и нужно избежать написания одного и того же выражения множества в каждой функции агрегирования.
Если используется внешнее выражение множества, оно должно быть помещено в начало определения области.
Пример: Внешнее выражение множества
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
Если используется выражение множества вне функции агрегирования, его также можно применить к существующим основным мерам.
Пример: Внешнее выражение множества применяется к основной мере
{<Year={2021}>} [Master Measure]
Выражение множества, используемое вне функций агрегирования, влияет на все выражение, если оно не заключено в скобки, тогда скобки определяют область. В приведенном ниже примере определения лексической области выражение множества применяется только к агрегированию внутри скобок.
Пример: Определение лексической области
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
Правила
Лексическая область
Выражение множества влияет на все выражение, если оно не заключено в скобки. В этом случае скобки определяют лексическую область.
Позиция
Выражение множества должно быть помещено в начало определения лексической области.
Контекст
Контекст — это выборка, имеющая отношение к выражению. Традиционно контекст всегда был состоянием по умолчанию для текущей выборки. Но если для объекта установлено альтернативное состояние, контекстом будет альтернативное состояние текущей выборки.
Контекст также можно определить в виде внешнего выражения множества.
Наследование
Внутренние выражения множества имеют приоритет над внешними. Если внутреннее выражение множества содержит идентификатор множества, он заменяет контекст. В противном случае контекст и выражение множества будут объединены.
-
{$<SetExpression>} — переопределяет внешнее выражение множества
-
{<SetExpression>} — объединяется с внешним выражением множества
Назначение множества элементов
Назначение множества элементов определяет способ объединения двух выборок. Если используется обычный знак равенства, выборка во внутреннем выражении множества имеет приоритет. В противном случае будет использоваться неявный оператор множества.
-
{<Field={value}>} — эта внутренняя выборка заменяет любую внешнюю выборку в “Field”.
-
{<Field+={value}>} — эта внутренняя выборка объединяется с внешней выборкой в “Field” с помощью оператора объединения.
-
{<Field*={value}>} — эта внутренняя выборка объединяется с внешней выборкой в “Field” с помощью оператора пересечения.
Наследование в несколько этапов
Наследование может происходить в несколько этапов. Примеры:
-
Текущая выборка → Sum(Amount)
Функция агрегирования будет использовать контекст, который здесь является текущей выборкой.
-
Текущая выборка → {<Set1>} Sum(Amount)
Set1 будет наследоваться от текущей выборки, а результат будет контекстом для функции агрегирования.
-
Текущая выборка → {<Set1>} ({<Set2>} Sum(Amount))
Set2 будет наследоваться от множества Set1, которое в свою очередь будет наследоваться от текущей выборки, а результат будет контекстом для функции агрегирования.
Функция Aggr()
Функция Aggr() создает вложенное агрегирование, которое имеет два независимых агрегирования. В приведенном ниже примере Count() вычисляется для каждого значения Dim и полученный массив агрегируется с помощью функции Sum().
Пример:
Sum(Aggr(Count(X),Dim))
Count() — внутреннее агрегирование, а Sum() — внешнее агрегирование.
-
Внутреннее агрегирование не наследует никакого контекста от внешнего агрегирования.
-
Внутреннее агрегирование наследует контекст от функции Aggr(), которая может содержать выражение множества.
-
И функция Aggr(), и функция внешнего агрегирования наследуют контекст от внешнего выражения множества.