一、Offset函数
语法:
OFFSET ( <行偏移量>, [<关系表>], [<OrderBy>],[空白],[PartitionBy] )
含义:
对指定分区(PartitioBy)中的行(关系表),按指定的列进行排序(OrderBy)后,根据(行偏移量)定位单行
参数:
参数 | 属性 | 描述 |
行偏移量 | 偏移的行,可以是常量,也可以是返回值的表达式 | |
关系表 | 可选 | 表表达式,要包含第3、第5个参数中用的列 |
OrderBy | 可选 | 排序依据,如省略,第二个参数须指定 |
空白 | 可选 | 保留的参数位置,暂时无用 |
PartitionBy | 可选 | 分区依据如果省略,视同只有一个分区 |
备注:
OrderBy、PartitionBy中出现的列,需要先在“关系表”中引用。
二、实例
已知表:日期表和表:销售记录(2020年~2022年),
表:日期表
表:销售记录(2020年~2022年)
生成月度销售金额报表
1、新建度量值,销售金额 = SUM('销售记录'[金额])
2、新建度量值,offset(-1) = CALCULATE('度量值表'[销售金额],OFFSET(-1,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后当前行向上偏移一行(-1)
3、新建度量值,offset(0) = CALCULATE('度量值表'[销售金额],OFFSET(0,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后当前行保持不变(0)
4、新建度量值,offset(1) = CALCULATE('度量值表'[销售金额],OFFSET(1,ALLSELECTED('日期表'[年],'日期表'[月]),ORDERBY('日期表'[月],ASC),,PARTITIONBY('日期表'[年])))
解析:以‘日期表’[年]作为分区,按‘日期表’[月]进行升序排列,然后当前行向下偏移一行(1)