VALUES与SELECTVALUE的差异 — Power BI实战应用

Power BI 最重要实战功能就是动态筛选计算并展示各项指标。在实战过程中,我遇到动态的计算人均营业收入。

如何动态法?

1、按月份展示人均营业收入;

2、按不同产品线展示人均营业收入;

3、按不同部门展示人均营业收入。

所需报表

一、事实表

1、营业收入表,字段:部门名称、产品线、日期、营业收入

2、人员结构表,字段:部门名称、日期、月度、月度号、人数

二、维度表

1、日期表,字段:日期、月度、年度

2、部门结构表,字段:部门名称

3、产品线表,字段:产品线

三、建立表间关系

用维度表的字段与事实表字段建立一对多的关系。

DAX 函数编写“人均营业收入”指标

一、通用公式

人均营业收入 =  营业收入 /  平均人数

平均人数 = 各月人数总和 / 月数

二、遇到的问题

1、展示月度环比情况,如现在是2020年8月份,展示8月份与7月份的环比情况;

2、不选择时间维度时,展示的累计月份的人均营业收入。

三、思路整理

1、如果选择1月份,则用1月份的人数代表1月份的平均人数;

2、如果选择其他月份,则 (人数-上月+ 人数-本月)/2 ;

3、如果不选择月份,累计人均。

四、编写DAX公式

      营业收入 = sum( '营业收入表 [营业收入] ) 

      人数-合计 = sum ( '人员结构表[人数] )

      人数-上月 = CALCULATE (' [人数-合计] , DATEADD('日期表[日期]),-1 , MONTH )

      人数-本月 = CALCULATE (' [人数-合计] , DATEADD('日期表[日期]),0  , MONTH )

      平均人数 = SWITCH( TRUE() ,

                             VALUES( '0日期'[月度号] ) = "1月" , [人数-合计] ,

                             VALUES( '0日期'[月度号] ) in { "2月" , "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"} , ([人数-上月]+ [人数-本月])/2 ,

                            [人数-合计]/ VALUE( MONTH( MAXX('营业收入表' , '营业收入表'[日期] )) )

)

人均营业收入 =DIVIDE ([营业收入] ,[平均人数 ])

    编写 平均人数  度量值后,Power BI 并没有提示有错,但是,当用卡片图展示时,报错!


报错

为什么会报错?

有人给出了答案,把 VALUES 替换成 SELECTEDVALUE ,替换后,

 平均人数 = SWITCH( TRUE() ,

                   SELECTEDVALUE( '0日期'[月度号] ) = "1月" , [人数-合计] ,

                   SELECTEDVALUE( '0日期'[月度号] ) in { "2月" , "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"} , ([人数-上月]+ [人数-本月])/2 ,

                  [人数-合计]/ VALUE( MONTH( MAXX('营业收入表' , '营业收入表'[日期] )) )

)

替换后,计算正确。为什么?

查找函数用法后明白: SELECTEDVALUE 返回的标量值,而VALUES返回的是不重复的表,在进行月度判断时,表无法与值进行逻辑判断,所以,报错!

SELECTEDVALUE 为值函数,VALUES为表函数!!!

SELECTEDVALUE 为值函数,VALUES为表函数!!!

SELECTEDVALUE 为值函数,VALUES为表函数!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容