WINDOW

Применимо к:Вычисляемый столбецВычисляемая таблицаИзмерятьВизуальное вычисление

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

Синтаксис

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

Параметры

Термин Определение
from Указывает, где начинается окно. Это может быть любое выражение DAX, возвращающее скалярное значение.
Поведение зависит от параметра from_type:
— если from_type REL, количество строк, возвращаемых (отрицательное значение) или вперед (положительное значение) из текущей строки, чтобы получить первую строку в окне.
— Если from_type значение ABSравно и from является положительным, это позиция начала окна с начала раздела. Индексирование основано на 1, а 0 интерпретируется как 1. Например, 0 и 1 означают, что окно начинается с начала раздела. Если from это отрицательно, это позиция начала окна с конца раздела. -1 означает последнюю строку в разделе.
from_type Изменяет поведение параметра from. Возможные значения: ABS (абсолютные) и REL (относительные). Значение по умолчанию — REL.
to То же, что и from, но указывает конец окна. Последняя строка включена в окно.
to_type То же, что и from_type, но изменяет поведение to.
relation (Необязательно) Табличное выражение, из которого возвращаются выходные строки. При использовании в визуальных вычислениях этот параметр принимает ось в визуальной форме.
Если указано, все столбцы в partitionBy должны поступать из нее или связанной таблицы.
Если опущено:
— необходимо явно указать orderBy .
— Все orderBy выражения partitionBy должны быть полными именами столбцов и поступать из одной таблицы.
— по умолчанию ALLSELECTED() всех столбцов в orderBy и partitionBy.
orderBy (Необязательно) Предложение ORDERBY(), содержащее выражения, определяющие порядок сортировки каждой секции.
Если опущено:
— необходимо явно указать relation .
— по умолчанию упорядочивается по каждому столбцу, relation который еще не указан в partitionBy.
blanks (Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке relation или axis.
Поддерживаемые значения:
  • DEFAULT (значение по умолчанию), где поведение числовых значений заключается в том, что пустые значения упорядочены от нуля до отрицательных значений. Поведение строк заключается в том, что пустые значения упорядочены перед всеми строками, включая пустые строки.
  • FIRST: пустые всегда упорядочены в начале независимо от возрастания или убывания сортировки.
  • LAST: пустые всегда упорядочены в конце, независимо от возрастания или убывания сортировки.

При указании blanks параметра и пустых в функции () дляORDERBY отдельных выражений blanks выражение orderBy имеет приоритет для соответствующего выражения orderBy. Выражения OrderBy без blanks указания параметра blanks в родительской функции.
partitionBy (Необязательно) Предложение (PARTITIONBY) с столбцами, определяющими relation способ секционирования. Если опущено, relation рассматривается как одна секция.
matchBy (Необязательно) Предложение (MATCHBY) с столбцами, определяющими сопоставление данных и определение текущей строки.
reset (Необязательно) Доступно только в визуальных вычислениях. Указывает, сбрасывается ли вычисление и на каком уровне иерархии столбцов визуальной фигуры. Допустимые значения: ссылка на поле столбца в текущей визуальной форме, NONE (по умолчанию), LOWESTPARENT, HIGHESTPARENTили целое число. Поведение зависит от целочисленного знака:
если ноль или опущено, вычисление не сбрасывается. Эквивалентно NONE.
— если положительный, целое число определяет столбец, начиная с самого высокого, независимо от зерна. HIGHESTPARENT эквивалентно 1.
— если отрицательно, целое число определяет столбец, начиная с самого низкого, относительно текущего зерна. LOWESTPARENT эквивалентно -1.

Возвращаемое значение

Все строки из окна.

Замечания

За исключением столбцов, добавленных функциями DAX таблицы, каждый столбец relation в (если matchBy не присутствует), или каждый столбец в matchBy и partitionBy (когда matchBy присутствует), должен иметь соответствующее внешнее значение, чтобы помочь определить текущую строку, с которой следует работать. Если from_type и to_type оба значения имеют значение ABS, следующие применяются только к столбцам partitionBy :

  • Если существует ровно один соответствующий внешний столбец, используется его значение.
  • Если соответствующий внешний столбец не существует:
    • WINDOW сначала определяет все столбцы, у которых нет соответствующего внешнего столбца.
    • Для каждого сочетания существующих значений для этих столбцов в WINDOWродительском контексте WINDOW вычисляется и возвращаются соответствующие строки.
    • WINDOWОкончательный результат — это объединение этих строк.
  • Если существует несколько соответствующих внешних столбцов, возвращается ошибка.

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

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

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

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

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

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

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

Вы можете использовать reset только в визуальных вычислениях, и его нельзя использовать в сочетании с orderBy или partitionBy. Если reset присутствует, можно указать axis , но нет relation.

Если значение reset является абсолютным (положительным целым числом или HIGHESTPARENTссылкой на поле), а вычисление вычисляется на целевом уровне иерархии или выше, вычисление сбрасывается для каждого отдельного элемента. То есть функция оценивается в секции, содержащей только этот конкретный элемент.

Примеры в этой статье можно использовать с примером модели Adventure Works DW 2020 Power BI Desktop. Сведения о получении модели см. в разделе DAXпримера модели.

Пример 1 — мера

Следующая мера:

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-дневный средний показатель цен на единицу для каждого продукта. 3-дневное окно состоит из трех дней, в течение которых продукт имел продажи, не обязательно три дня подряд.

Пример 2. Мера

Следующая мера:

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

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

Год Число месяцев года Сумма продаж 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] )

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

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

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

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

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

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

Возвращает совокупный общий объем продаж по месяцам, вычисляемый по каждому кварталу. Значение LOWESTPARENT может использоваться вместо -1 с тем же результатом.