一、Window函数
语法:
Window ( <起始位置>,<起始位置类型>,<结束位置>,<结束位置类型>, [<关系>], [<OrderBy>],[空白],[PartitionBy] )
含义:
对指定分区(PartitioinBy)中的行(关系表),按指定的列进行排序(OrderBy)后,根据(起始位置)和(结束位置)定位多行。
参数:
|   参数  |   属性  |   描述  | 
|   起始位置  |   ABS时,1代表第1行,-1代表最后1行;REL时,-1代表上一行,0代表当前行,1代表下一行  | |
|   起始位置类型  |   可选  |   ABS(绝对)和 REL(相对),默认为 REL  | 
|   结束位置  |   ABS时,1代表第1行,-1代表最后1行;REL时,-1代表上一行,0代表当前行,1代表下一行  | |
|   结束位置类型  |   可选  |   ABS(绝对)和 REL(相对),默认为 REL  | 
|   关系表  |   可选  |   表表达式,要包含第3、第5个参数中用的列  | 
|   OrderBy  |   可选  |   排序依据,如省略,第二个参数须指定  | 
|   空白  |   可选  |   保留的参数位置,暂时无用  | 
|   PartitionBy  |   可选  |   分区依据如果省略,视同只有一个分区  | 
备注:
OrderBy、PartitionBy中出现的列,需要先在“关系表”中引用。
二、实例
已知表:日期表和表:销售记录(2020年~2022年),
表:日期表

表:销售记录(2020年~2022年)

生成月度销售金额报表

1、新建度量值,销售金额 = SUM('销售记录'[金额])
2、新建度量值,window(-1REL,1REL) = CALCULATE('度量值表'[销售金额],WINDOW(-1,REL,1,REL,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后定位当前行上一行至当前行下一行(-1,REL,1,REL)
3、新建度量值,window(1ABS,-1ABS) = CALCULATE('度量值表'[销售金额],WINDOW(1,ABS,-1,ABS,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后定位第一行至最后一行(1,ABS,-1,ABS)
4、新建度量值,window(0REL,-1ABS) = CALCULATE('度量值表'[销售金额],WINDOW(0,REL,-1,ABS,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后定位当前行至最后一行(0,REL,-1,ABS)
5、新建度量值,window(1ABS,0REL) = CALCULATE('度量值表'[销售金额],WINDOW(1,ABS,0,REL,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后定位第一行至当前行(1,ABS,0,REL)



















