Перейти к основному содержимому Перейти к дополнительному содержимому

Внутренние и внешние выражения множества

Выражения множества могут использоваться во внутренних и внешних функциях агрегирования и заключаются в фигурные скобки.

Когда выражение множества используется внутри функции агрегирования, оно может выглядеть следующим образом:

Пример: Внутреннее выражение множества

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(), и функция внешнего агрегирования наследуют контекст от внешнего выражения множества.

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!