返回位于给定间隔内的多个行。
语法
WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
parameters
| 术语 | 定义 |
|---|---|
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 。
- 默认按尚未指定 partitionBy的每个relation列进行排序。 |
blanks |
(可选)一个枚举,用于定义在对 relation 或 axis进行排序时如何处理空值。
支持的值为:
在单个表达式的 () 函数中ORDERBY同时指定 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 存在)必须具有相应的外部值,以帮助定义要对其操作的当前行。
to_type如果from_type两者都具有值ABS,则以下内容仅适用于partitionBy列:
- 如果正好存在一个对应的外部列,则使用其值。
- 如果不存在相应的外部列:
- WINDOW 首先确定没有相应外部列的所有列。
- 对于父上下文中 WINDOW这些列的现有值的每个组合, WINDOW 将计算相应的行,并返回相应的行。
- WINDOW“最终输出是这些行的并集。
- 如果存在多个相应的外部列,则返回错误。
如果 relation 表函数添加了所有 DAX列,则返回错误。
如果 matchBy 存在, WINDOW 则尝试使用 matchBy 列来 partitionBy 标识行。
如果matchBy不存在,并且指定的orderBypartitionBy列不能唯一标识以下行中的relation每一行:
- WINDOW 尝试查找唯一标识每行所需的最少列数。
- 如果找到此类列, WINDOW 请自动将这些新列追加到
orderBy其中,并且每个分区都使用此新的 orderBy 列集进行排序。 - 如果找不到此类列,则返回错误。
如果:
- 中不存在
relation相应的orderBy外部值或partitionBy列。 - 整个窗口位于分区之外,或窗口的开头在其结束之后。
如果在与同一个表relation上定义的计算列内使用WINDOW,并且orderBy被省略,则返回错误。
如果窗口的开头位于第一行之前,则它设置为第一行。 同样,如果窗口的末尾位于分区的最后一行之后,则会将其设置为最后一行。
只能在reset视觉计算中使用,不能将其与orderBy或 .partitionBy 如果reset存在,则可以指定但不relation指定 axis 。
如果值为 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 | 1,519,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 | 2,057,902 美元 | 15,413,595 美元 |
| 2018 财年 | 9 | 2,523,948 美元 | 17,937,543 美元 |
| 2018 财年 | 10 | 561,681 美元 | 18,499,224 美元 |
| 2018 财年 | 11 | 4,764,920 美元 | 23,264,145 美元 |
| 2018 财年 | 12 | 596,747 美元 | 23,860,891 美元 |
| 2019 财年 | 1 | 1,847,692 美元 | 1,847,692 美元 |
| 2019 财年 | 2 | 2,829,362 美元 | 4,677,054 美元 |
| 2019 财年 | 3 | 2,092,434 美元 | 6,769,488 美元 |
| 2019 财年 | 4 | 2,405,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 | 3,611,092 美元 | 31,446,030 美元 |
| 2019 财年 | 12 | 2,624,078 美元 | 34,070,109 美元 |
| 2020 财年 | 1 | 3,235,187 美元 | 3,235,187 美元 |
| 2020 财年 | 2 | 4,070,046 美元 | 7,305,233 美元 |
| 2020 财年 | 3 | 4,429,833 美元 | 11,735,066 美元 |
| 2020 财年 | 4 | 4,002,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 | 3,542,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具有相同的结果。
下面的屏幕截图显示了视觉矩阵和视觉计算表达式:
示例 4 - 视觉计算
以下视觉计算 DAX 查询:
TotalSalesRunningSumByQuarter =
SUMX ( WINDOW ( 0, ABS, 0, REL,, -1 ), [SalesAmount] )
按月份返回累计总销售额,按季度计算。
可以使用该值 LOWESTPARENT 而不是 -1,结果相同。