小伙伴们大家好,上期介绍了【全动态多分类小多趋势图】为啥可以被称为"全动态",今天我们来研究一下如何实现第一个全动态【多指标任意切换】。
模型结构如下图所示:
1个事实表:【F01-订单明细】
4个维度表:【D02-省份区域】、【D03-产品信息】、【D04-日期表】、【D07-业务员信息】
维度表与事实表之间创建一对多的关系。
模型建立好后,我们需要增加一个辅助表用来创建切片器,从而实现指标切换,这里我们使用DAX函数来生成一张表,表名称为 【FZ02_指标切换】,公式写法如下:
FZ02_指标切换 =
SELECTCOLUMNS (
{
( "销售额", "Sales", 1 ),
( "利润额", "Profit", 2 ),
( "订单数", "Order", 3 )
},
"指标名称", [Value1],
"KPI.Name", [Value2],
"序号", [Value3]
)
创建表的方法如下图所示:
选择【数据】视图
选择【主页】选项卡
点击【新建表】
将公式粘贴到编辑栏
简单讲解一下这个函数:
花括号 {} 可以用来创建表,花括号中使用小括号 () 可以用来生成表中的每一行,小括号中的逗号用来将一行分成多列,因此函数生成一个3行3列的表格。如下图所示:
显而易见,表的列标题是默认值 [Value1]、[Value2]、[Value3],因此我们需要给列标题重新命名,方便后期调用。
这里用了 SELECTCOLUMNS 函数,这个函数也很好理解,选择某个表中的某些列并且重命名。
公式中分别选择了
[Value1]列,重命名为 [指标名称];
[Value2]列,重命名为 [Name];
[Value3]列,重命名为 [序号]
辅助表有了,接下用辅助表创建一个切片器就轻而易举了,操作步骤见动图演示:
切片器有了,接下来就要解决如何让各个指标与切片器联动的问题了,这里同样要使用DAX 函数来创建度量值,度量值写法如下:
动态指标 =
SWITCH( TRUE(),
SELECTEDVALUE( 'FZ02_指标切换'[Name] ) = "Sales" , [销售总额],
SELECTEDVALUE( 'FZ02_指标切换'[Name] ) ="Profit" , [利润总额],
SELECTEDVALUE( 'FZ02_指标切换'[Name] ) ="Order" , [订单总数],
[销售总额]
)
用SWITCH函数做判断,遇到满足的第一个条件则返回对应结果。
度量值的名称叫做 [动态指标],SELECTEDVALUE 函数用来获取当前切片器选择的值。
如果切片器选择了[销售额],就相当于在【FZ02_指标切换】表中 [Name] 这一列筛选了值"Sales",因此返回对应的度量值 [销售总额],[销售总额] 度量值写法如下:
销售总额 =
SUMX (
'F01-订单信息',
( 1 - 'F01-订单信息'[折扣] ) * 'F01-订单信息'[销售额]
)
度量值的含义:这里的销售总额是对去除折扣后的销售额进行求和。
SUMX函数是一个迭代函数,跟Excel里的SUMPRODUCT函数很像,先在【F01-订单信息】表中的每一行计算折扣后的销售额,最后再加总。
如果切片器选择了[利润额],就相当于在【FZ02_指标切换】表中 [Name] 这一列筛选了值"Profit",因此返回对应的度量值 [利润总额],[利润总额] 度量值写法如下:
利润总额 =
SUM ( 'F01-订单信息'[利润] )
度量值的含义:用SUM 函数对【F01-订单信息】表中的 [利润] 列进行求和。
如果切片器选择了[订单数],就相当于在【FZ02_指标切换】表中 [Name] 这一列筛选了值"Order",因此返回对应的度量值 [订单总数],[订单总数] 度量值写法如下:
订单总数 =
DISTINCTCOUNT ( 'F01-订单信息'[订单 ID] )
度量值的含义:用DISTINCTCOUNT 函数对【F01-订单信息】表中的 [订单 ID] 列进行非重复计数。
如果切片器啥都不选那么默认返回度量值 [销售总额]。
好了,就讲这么多,以防消化不良,下期我们继续来研究如何实现【期间任意切换】,拜拜!
领取专属 10元无门槛券
私享最新 技术干货