WINDOW

применимо:вычисляемый столбецвычисляемой таблицеMeasureвизуального вычисления

Возвращает несколько строк, расположенных в пределах заданного интервала.

Синтаксис

WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Параметры

Термин Определение
from Указывает, где начинается window. Это может быть любое выражение DAX, возвращающее скалярную value.
Поведение зависит от параметра from_type:
— Iffrom_type имеет значение REL, количество строк для возврата (отрицательных value) or вперед (положительный value) из текущей строки, чтобы получить строку first в window.
— Iffrom_typeABS, andfrom положительно, то это позиция начала window с начала секции. Индексирование основано на 1. Например, 1 означает, что window начинается с начала раздела. If from отрицательно, то это позиция начала window с конца раздела. -1 означает last строку в секции.
from_type Изменяет поведение параметра from. Возможные valuesABS (абсолютные) and REL (относительные). Значение по умолчанию — REL.
to То же, что и from, но указывает конец window. Строка last включена в window.
to_type То же, что и from_type, но изменяет поведение to.
relation (Необязательно) Табличное выражение, из которого возвращаются выходные строки.
If указанные столбцы all в partitionBy должны поступать из нее or таблицу related.
If опущено:
- orderBy необходимо явно указать.
— выражения AllorderByandpartitionBy должны быть полными именами столбцов and поступать из одной таблицы.
. По умолчанию ALLSELECTED() столбцов all в orderByandpartitionBy.
axis (Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях, and заменяет relation.
orderBy (Необязательно) Предложение ORDERBY(), содержащее выражения, которые define сортировке каждой секции.
If опущено:
- relation необходимо явно указать.
— по умолчанию упорядочивается по каждому столбцу в relationnot, который уже указан в partitionBy.
blanks (Необязательно) Перечисление, определяющее, как обрабатывать blankvalues при сортировке.
Этот параметр зарезервирован для дальнейшего использования.
В настоящее время единственным поддерживаемым value является DEFAULT, где поведение числовых valuesblankvalues упорядочено от нуля and отрицательных values. Поведение строк blankvalues упорядочивается перед all строками, включая пустые строки.
partitionBy (Необязательно) Предложение PARTITIONBY(), содержащее столбцы, define секционирование relation. If опущено, relation рассматривается как одна секция.
matchBy (Необязательно) Предложение MATCHBY(), содержащее столбцы, define сопоставление данных and идентификации текущей строки.
reset (Необязательно) Доступно только в визуальных вычислениях. Указывает if сбросы вычислений, and на каком уровне иерархии столбцов визуальной фигуры. Принятые values: NONE, LOWESTPARENT, HIGHESTPARENT, or целое число. Поведение зависит от целочисленного sign:
- If ноль or пропущено, вычисление выполняет сброс not. Эквивалентно NONE.
— If положительным, целое число определяет столбец, начиная с самого высокого, независимо от зерна. HIGHESTPARENT эквивалентно 1.
- If отрицательное число определяет столбец, начиная с самого низкого, относительно текущего зерна. LOWESTPARENT эквивалентно -1.

Возврат value

All строк из window.

Замечания

Except для столбцов, добавленных функциями таблицы DAX, каждый столбец relation, если matchBynot присутствует, or каждый столбец в matchByandpartitionBy, если matchBy присутствует, должен иметь соответствующую внешнюю value, чтобы помочь define текущей строке, в которой будет работать. If from_type and to_type оба имеют valueABS, то следующие действия применяются только к столбцам partitionBy:

  • If есть ровно один соответствующий внешний столбец, используется его value.
  • If нет соответствующего внешнего столбца:
    • WINDOW first определить столбцы all, у которых нет соответствующего внешнего столбца.
    • Для каждого сочетания существующих values для этих столбцов в родительском контексте WINDOWвычисляется WINDOW, and возвращаются соответствующие строки.
    • WINDOW окончательные выходные данные — это union этих строк.
  • If есть несколько соответствующих внешних столбцов, возвращается error.

If all столбцов relationбыли добавлены DAX табличными функциями, возвращается error.

If matchBy присутствует, WINDOW попытается использовать столбцы matchByandpartitionBy для идентификации строки.
If matchBy not присутствуют and столбцы, указанные в orderByandpartitionBy, не могут однозначно идентифицировать каждую строку в relation, а затем:

  • WINDOW попытается find наименьшее количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
  • If такие столбцы можно найти, WINDOW автоматически добавит эти новые столбцы к orderBy, and каждый раздел сортируется с помощью этого нового набора столбцов orderBy.
  • If не удается найти такие столбцы, возвращается error.

Пустая таблица возвращается if:

  • Соответствующий внешний value столбца orderByorpartitionBynot существует в relation.
  • Весь window находится за пределами секции, or начало window после его окончания.

If WINDOW используется в вычисляемом столбце, определенном в той же таблице, что и relation, andorderBy опущен, возвращается error.

If начало window оказывается перед строкой first, а затем для нее задано значение first строки. Аналогичным образом, if конец window находится после строки last секции, а затем для нее задано значение last строки.

reset можно использовать только в визуальных вычислениях, and нельзя использовать в сочетании с orderByorpartitionBy. If reset присутствует, axis можно указать, но relation невозможно.

Пример 1. measure

Следующие measure:

3-day Average Price = 
AVERAGEX(
    WINDOW(
        -2,REL,0,REL,
        SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
        ORDERBY('Date'[Date]),
        KEEP,
        PARTITIONBY('Product'[Product])
    ), 
    CALCULATE(AVERAGE(Sales[Unit Price]))
)

Возвращает 3-dayaverage цен на единицу для каждой product. Обратите внимание, что 3-daywindow состоит из трех дней, в течение которых product имеет продажи, not обязательно три последовательных calendar дней.

Пример 2. measure

Следующие measure:

RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

Возвращает запущенную sum для общего объема продаж по Month числу Year, перезапуска для каждого финансового Year:

Year Month число Year Сумма продаж RunningSum
ФГ2018 1 $1,327,675 $1,327,675
ФГ2018 2 $3,936,463 $5,264,138
ФГ2018 3 $700,873 $5 965 011
ФГ2018 4 $1519,275 $7,484,286
ФГ2018 5 $2,960,378 $10,444,664
ФГ2018 6 $1,487,671 $11,932,336
ФГ2018 7 $1,423,357 $13,355,693
ФГ2018 8 $2057,902 $15,413,595
ФГ2018 9 $2,523,948 $17,937,543
ФГ2018 10 $561,681 $18,499,224
ФГ2018 11 $4764,920 $23,264,145
ФГ2018 12 $596,747 $23,860,891
2019 финансовый год 1 $1,847,692 $1,847,692
2019 финансовый год 2 $2,829,362 $4677 054
2019 финансовый год 3 $2092,434 $6 769 488
2019 финансовый год 4 $2405,971 $9,175,459
2019 финансовый год 5 $3,459,444 $12,634,903
2019 финансовый год 6 $2,850,649 $15,485,552
2019 финансовый год 7 $2,939,691 $18,425,243
2019 финансовый год 8 $3,964,801 $22,390,045
2019 финансовый год 9 $3,287,606 $25,677,650
2019 финансовый год 10 $2,157,287 $27,834,938
2019 финансовый год 11 $ 3611,092 $31,446,030
2019 финансовый год 12 $ 2624 078 $34,070,109
2020-й финансовый год 1 $3,235,187 $3,235,187
2020-й финансовый год 2 $ 4070 046 $7,305,233
2020-й финансовый год 3 $4429,833 $11,735,066
2020-й финансовый год 4 $4002,614 $15,737,680
2020-й финансовый год 5 $5,265,797 $21,003,477
2020-й финансовый год 6 $3,465,241 $24,468,717
2020-й финансовый год 7 $3,513 064 $27,981,781
2020-й финансовый год 8 $5,247,165 $33,228,947
2020-й финансовый год 9 $5,104,088 $38,333,035
2020-й финансовый год 10 $3542,150 $41,875,184
2020-й финансовый год 11 $5,151,897 $47,027,081
2020-й финансовый год 12 $4,851,194 $51,878,275

Пример 3. Визуальное вычисление

Следующий визуальный расчет DAX запроса:

TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])

Возвращает совокупный общий объем продаж month, вычисляемый по каждой year. Вместо HIGHESTPARENTможно использовать values 1 and -2 с теми же результатами.

Снимок экрана ниже: визуальная матрица and выражения визуального вычисления:

DAX визуального вычисления

Пример 4. Визуальное вычисление

Следующий визуальный расчет DAX запроса:

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

Возвращает совокупный общий объем продаж month, вычисляемый по каждой quarter.

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBER RUNNINGSUM