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 . |
axis |
(Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях и заменяет relation . |
orderBy |
(Необязательно) Предложение ORDERBY(), содержащее выражения, определяющие порядок сортировки каждой секции.
Если опущено: - relation необходимо явно указать.
— по умолчанию упорядочивается по каждому столбцу в relation , который еще не указан в partitionBy . |
blanks |
(Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке relation или axis .
Поддерживаемые значения:
Примечание. Если параметр 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. - Если такие столбцы не удается найти, возвращается ошибка.
Если возвращается пустая таблица:
- Соответствующее внешнее значение столбца
orderBy
илиpartitionBy
не существует вrelation
. - Все окно находится за пределами секции, или начало окна после его окончания.
Если WINDOW используется в вычисляемом столбце, определенном в той же таблице, что и relation
, и orderBy
опущен, возвращается ошибка.
Если начало окна выходит перед первой строкой, оно устанавливается в первую строку. Аналогичным образом, если конец окна находится после последней строки секции, то для нее задано значение последней строки.
reset
можно использовать только в визуальных вычислениях и не может использоваться в сочетании с orderBy
или partitionBy
. Если reset
присутствует, axis
можно указать, но relation
невозможно.
Пример 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 и -2 можно использовать вместо HIGHESTPARENT
с одинаковыми результатами.
Снимок экрана ниже: визуальная матрица и выражение визуального вычисления:
Пример 4. Визуальное вычисление
Следующий визуальный расчет DAX запроса:
TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])
Возвращает совокупный общий объем продаж по месяцам, вычисляемый по каждому кварталу.
Связанное содержимое
INDEX MOVINGAVERAGE OFFSET ORDERBY PARTITIONBY RANGE RANK ROWNUMBER RUNNINGSUM