Power BI2022年底正式推出的DAX新函数:OFFSET、INDEX、WINDOW

2022年的最后一次更新,正式发布了三个新的DAX函数,OFFSET、INDEX、WINDOW,这篇文章来看一下这三个函数的用法。


OFFSET

用于检索偏移特定行后的结果,语法如下:

OFFSET(

偏移的行数,//可以是常量,也可以是返回值的表达式

表表达式,//可选

orderBy, //可选,排序依据,如省略,第二个参数须指定

空白参数, //可选,保留的参数位置,暂时无用

partitionBy // 可选,分区依据,如果省略,视同只有一个分区


语法看起来比较复杂,通过具体的示例来理解,可以更轻松地熟悉它的用法。

下面根据这个表格来说明,这是每个季度的销售额,

如果要获得上个季度的销售额,除了用之前的时间智能函数,还可以这样写:

OFFSET =

CALCULATE(

[销售额],

OFFSET(-1,ALLSELECTED('日期表'[年度季度]))

)


OFFSET返回表,度量值中一般利用CALCULATE来返回定位后的结果(下面两个函数同样如此)。

这里就是只用了OFFSET的前2个参数,第一个参数-1,表示提取向前偏移1行的数据(如果是向后偏移2行,取下下个季度的值,第一个参数应该是2);第二个参数是输出的行,后面的参数都可以省略,结果如下:


第3个参数ORDERBY省略,默认按照第二个参数列排序,也就是按年度季度排序,向前偏移一行,就得到了上个季度的数据。

如果想在每年范围内进行这样的偏移计算,就需要用到最后一个参数,度量值这样写:

OFFSET =

CALCULATE(

[销售额],

OFFSET(
-1,

ALLSELECTED('日期表'[年度季度],'日期表'[年度]),,,

PARTITIONBY('日期表'[年度])

)

)


对于在PARTITIONBY中的字段(以及在ORDERBY中的字段),必须放到第二个参数中,这就是上面度量值中,第二个参数里面也要带上'日期表'[年度]的原因,在年度内偏移的效果如下:


这种偏移只在年度的区间内进行,年度变化后,再重新取开始,所以第一个季度都是空值。


INDEX

用于检索特定行的结果,语法如下:


INDEX(

检索位置, //1表示第一行,-1表示最后一行,以此类推

表表达式,//可选

orderBy,//可选,排序依据,如省略,第二个参数须指定

空白参数, //可选,保留的参数位置,暂时无用

partitionBy // 可选,分区依据,如果省略,视同只有一个分区


它和OFFSET的参数几乎一样,还是拿上面的例子来说明这个函数的用法。

如果要返回第一个季度的数据,度量值这样写:


INDEX =

CALCULATE(

[销售额],

INDEX(1,ALLSELECTED('日期表'[年度季度]))

)




可以看出它全部返回的都是第一行的数据;如果想按年度返回本年第一季度的数据,同样可以利用最后一个partitionBy参数:

INDEX =

CALCULATE(

[销售额],

INDEX(
1,

ALLSELECTED('日期表'[年度季度],'日期表'[年度]),,,

PARTITIONBY('日期表'[年度])

)

)


每一行的结果都是本年第一季度的数据。


WINDOW

返回位于给定区间内的多个行,语法如下:

WINDOW(

起始位置,

起始位置类型,//可选, ABS(绝对)和 REL(相对),默认为 REL

结束位置,

结束位置类型,//可选, ABS(绝对)和 REL(相对),默认为 REL

表表达式, //可选

orderBy, //可选,排序依据,如省略,第5个参数须指定

空白参数,//可选,保留的参数位置,暂时无用

partitionBy // 可选,分区依据,如果省略,视同只有一个分区


后面4个参数与前两个函数也是一样的,只是WINDOW返回一个区间,所以前面用了4个参数来确定起止位置以及位置的类型。

常用的滚动就和,比如计算前两个季度的累计之和,可以用WINDOW函数这样写度量值:

WINDOW=

CALCULATE(

[销售额],

WINDOW(

-1,REL,0,REL,

ALLSELECTED('日期表'[年度季度])

)

)


如果位置类型是相对,则位置负数就表示向前移动几行,0表示当前行,效果如下:


如果将位置改成绝对,1就表示表的第一行(-1表示表的最后一行),度量值这样写:

WINDOW =

CALCULATE(

[销售额],

WINDOW(

1,ABS,1,ABS,

ALLSELECTED('日期表'[年度季度])

)

)


起止位置都是第一行,其效果就是取绝对位置的第一行数据:


还可以通过设置起始位置绝对引用,结束位置相对引用,来实现累计求和的效果:

WINDOW =

CALCULATE(

[销售额],

WINDOW(

1,ABS,0,REL,

ALLSELECTED('日期表'[年度季度])

)

)


起始位置1绝对,就是从第1行开始,结束位置0相对,就是到达当前行结束,因此可以实现从第一行累加到当前行的效果。



看到WINDOW函数的起止位置设置,是不是有Excel单元格绝对引用、相对引用的感觉,它确实像Excel一样,带来了更加灵活的区间计算。

WINDOW函数像前面两个函数一样,也可以设置最后一个partitionBy参数,来实现本年内的区域计算,比如本年累积求和:


WINDOW =

CALCULATE(

[销售额],

WINDOW(

1,ABS,0,REL,

ALLSELECTED('日期表'[年度季度],'日期表'[年度]),,,PARTITIONBY('日期表'[年度])

)

)





以上就是这三个新函数的基本用法,为便于理解,上面的示例用的是日期序列计算,其实熟悉了他们的用法以后,其他类型的计算也是可以用这些函数。

这三个函数还没有最终完善,相信之后它们会变得更加强大和灵活,也会带来更丰富的应用场景。

其他精彩内容

PowerBI如何进行财年分析?

漂亮的桑基图,PowerBI帮你轻松制作

PowerBI报告中如何嵌入视频?

展开阅读全文

页面更新:2024-03-07

标签:函数   度量   销售额   分区   季度   年底   位置   参数   日期   年度   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top