
小伙伴们大家好!
☞DAX综合实战案例-简单的中国式报表详解(一)
☞DAX综合实战案例-简单的中国式报表详解(二)
中讲解了中国式表头的构建,按列排序,时间智能函数,这些菜都已经做好,最后一步就是拼盘了,如何把它们按照需要的样子拼在一起呢?
接下来就处理这个问题。
我们再来看下报表的样子:


报表先是展示各月的预算达成情况,然后是年累计、上年全年、上年年累计情况,最后是差异比较。表头通过按列排序已经实现了,现在就是要把对应的度量也体现在对应的表头下面。
还是要用到DAX公式来实现。报表的行列筛选是一种外部筛选,如何通过DAX控制来实现这一效果呢?可以考虑用SWITCH+SELECTEDVALUE的方式来实现。
比如,各月的预算、达成、达成率度量可以这么写:
LMeasure=
SWITCH(TRUE(),
//各月度预算、达成、达成率
SELECTEDVALUE('表头'[L1])="月份"&&SELECTEDVALUE('表头'[L3])="预算",
CALCULATE('事实表'[预算额],TREATAS(VALUES('表头'[L2]),'日期表'[月份]),YEAR('事实表'[Date])=YEAR(TODAY())),
SELECTEDVALUE('表头'[L1])="月份"&&SELECTEDVALUE('表头'[L3])="达成",
CALCULATE('事实表'[达成额],TREATAS(VALUES('表头'[L2]),'日期表'[月份]),YEAR('事实表'[Date])=YEAR(TODAY())),
SELECTEDVALUE('表头'[L1])="月份"&&SELECTEDVALUE('表头'[L3])="达成率",
CALCULATE('事实表'[达成率],TREATAS(VALUES('表头'[L2]),'日期表'[月份]),YEAR('事实表'[Date])=YEAR(TODAY()))
通过SELECTEDVALUE获得表头L1字段和表头L3字段的筛选(以上筛选的是月份及对应的预算达成,这是外部筛选),TREATAS(VALUES(‘表头’[L2]),‘日期表’[月份]),YEAR(‘事实表’[Date])=YEAR(TODAY())这是公式筛选,把当前年月的度量计算出来,通过TREATAS使得表头L2与日期表的月份建立虚拟关系,而日期表又与事实表存在物理关系,通过表关联传递筛选关系,进而计算出对应筛选条件下的度量。
同样的道理,今年年累计的度量如下:
LMeasure0 =
SWITCH(TRUE(),
//今年累计预算、达成、达成率
SELECTEDVALUE('表头'[L1])="总计"&&SELECTEDVALUE('表头'[L3])="预算"&&SELECTEDVALUE('表头'[L2])="今年全年",
'事实表'[预算_YTD2],
SELECTEDVALUE('表头'[L1])="总计"&&SELECTEDVALUE('表头'[L3])="达成"&&SELECTEDVALUE('表头'[L2])="今年全年",
'事实表'[达成_YTD],
SELECTEDVALUE('表头'[L1])="总计"&&SELECTEDVALUE('表头'[L3])="达成率"&&SELECTEDVALUE('表头'[L2])="今年全年",
'事实表'[达成率_YTD])
上年全年、上年年累计和差异对比都是一样的套路,完整的公式如下:
LMeasure0 =
SWITCH(TRUE(),
//各月度预算、达成、达成率
SELECTEDVALUE('表头'[L1])="月份"&a

本文详细介绍了如何使用DAX公式构建中国式报表,包括按月展示预算达成情况,年累计、上年全年比较,以及差异分析。通过SELECTEDVALUE和TREATAS函数控制外部筛选,结合FORMAT函数调整数值格式,最终实现报表的完整效果。文章还提到在处理未发生月的数据显示和格式问题上的挑战。
最低0.47元/天 解锁文章
1328

被折叠的 条评论
为什么被折叠?



