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

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

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

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

```
Sum( {$<Year={2021}>} Sales )
```

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

Если используется внешнее выражение множества, оно должно быть помещено в начало определения области.

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

```
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
```

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

Пример: Внешнее выражение множества применяется к основной мере

```
{<Year={2021}>} [Master Measure]
```

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

Пример: Определение лексической области

```
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
```

## Правила

#### Лексическая область

Выражение множества влияет на все выражение, если оно не заключено в скобки. В этом случае скобки определяют лексическую область.

#### Позиция

Выражение множества должно быть помещено в начало определения лексической области.

#### Контекст

Контекст — это выборка, имеющая отношение к выражению. Традиционно контекст всегда был состоянием по умолчанию для текущей выборки. Но если для объекта установлено альтернативное состояние, контекстом будет альтернативное состояние текущей выборки.

Контекст также можно определить в виде внешнего выражения множества.

#### Наследование

Внутренние выражения множества имеют приоритет над внешними. Если внутреннее выражение множества содержит идентификатор множества, он переопределяет контекст, определенный во внешнем выражении множества. В противном случае вычисляются и внутренние, и внешние выражения множества.

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

{&lt;Year={2023}&gt;} Sum(Sales) / Count({1} distinct OrderNumber)

В приведенном выше выражении внутреннее выражение множества Count({1} distinct OrderNumber) состоит из идентификатора множества {1}. Когда оценивается это внутреннее выражение множества, область, определенная во внешнем выражении множества {&lt;Year={2023}&gt;}, не применяется.

Пример 2: Внутренние выражения множества без идентификаторов множества

{&lt;Year={2023}&gt;} Sum ({&lt;Status={'Confirmed'}&gt;} Sales\_Stream1) + Sum ({&lt;UpdatedStatus={'Confirmed'}&gt;} Sales\_Stream2)

В приведенном выше выражении внутренние выражения множества Sum ({&lt;Status={'Confirmed'}&gt;} Sales\_Stream1) и Sum ({&lt;UpdatedStatus={'Confirmed'}&gt;} Sales\_Stream2) не содержит идентификаторов множества. Поэтому внешнее выражение множества {&lt;Year={2023}&gt;} и оба внутренних выражения множества применяются при вычислении результата все вместе.

#### Назначение множества элементов

Назначение множества элементов определяет способ объединения двух выборок. Если используется обычный знак равенства, выборка во внутреннем выражении множества имеет приоритет. В противном случае будет использоваться неявный оператор множества.

* {&lt;Field={value}&gt;} — эта внутренняя выборка заменяет любую внешнюю выборку в “Field”.

* {&lt;Field+={value}&gt;} — эта внутренняя выборка объединяется с внешней выборкой в “Field” с помощью оператора объединения.

* {&lt;Field\*={value}&gt;} — эта внутренняя выборка объединяется с внешней выборкой в “Field” с помощью оператора пересечения.

#### Наследование в несколько этапов

Наследование может происходить в несколько этапов. Примеры:

* Текущая выборка → Sum(Amount)

  Функция агрегирования будет использовать контекст, который здесь является текущей выборкой.

* Текущая выборка → {&lt;Set1&gt;} Sum(Amount)

  Set1 будет наследоваться от текущей выборки, а результат будет контекстом для функции агрегирования.

* Текущая выборка → {&lt;Set1&gt;} ({&lt;Set2&gt;} Sum(Amount))

  Set2 будет наследоваться от множества Set1, которое в свою очередь будет наследоваться от текущей выборки, а результат будет контекстом для функции агрегирования.

#### Функция Aggr()

Функция Aggr() создает вложенное агрегирование, которое имеет два независимых агрегирования. В приведенном ниже примере Count() вычисляется для каждого значения Dim и полученный массив агрегируется с помощью функции Sum().

Пример:

```
Sum(Aggr(Count(X),Dim))
```

Count() — внутреннее агрегирование, а Sum() — внешнее агрегирование.

* Внутреннее агрегирование не наследует никакого контекста от внешнего агрегирования.

* Внутреннее агрегирование наследует контекст от функции Aggr(), которая может содержать выражение множества.

* И функция Aggr(), и функция внешнего агрегирования наследуют контекст от внешнего выражения множества.

## Подробнее

* [Внутренние и внешние выражения множества](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#)

* [Расширения со знаком доллара](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/dollar-sign-expansions.htm)

* [Создание переменной](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Variables/create-variable-using-dialog.htm)

* [Диалоговое окно «Переменные»](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Sheets/variables-dialog.htm)

* [Внешние выражения множества и расширения со знаком доллара](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/outer-set-expression-dollar-sign-expansion.htm)