首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原来DAX函数是全动态图表实现的幕后英雄#POWER BI#No.006

小伙伴们大家好,上期介绍了【全动态多分类小多趋势图】为啥可以被称为"全动态",今天我们来研究一下如何实现第一个全动态【多指标任意切换】。

模型结构如下图所示:

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] 列进行非重复计数。

如果切片器啥都不选那么默认返回度量值 [销售总额]。

好了,就讲这么多,以防消化不良,下期我们继续来研究如何实现【期间任意切换】,拜拜!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200614A0LLFY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券