Поделиться через


WINDOW

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

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

Синтаксис

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

Параметры

Термин Определение
from Указывает, где начинается окно. Это может быть любое выражение DAX, возвращающее скалярное значение.
Поведение зависит от параметра from_type:
— если from_type REL, количество строк, возвращаемых (отрицательное значение) или вперед (положительное значение) из текущей строки, чтобы получить первую строку в окне.
— если from_typeABS, а 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 указании параметра и пустых blanks значений в функции () дляORDERBY отдельных выражений 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.
  • Если такие столбцы не удается найти, возвращается ошибка.

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

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

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

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

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

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

Пример 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 с тем же результатом.

INDEX MOVINGAVERAGE OFFSET ORDERBY PARTITIONBY RANGE RANK ROWNUMBER RUNNINGSUM