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为表函数!!!