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

Power BI度量值和新建表,到底有什么区别?

PowerBI中,有三个地方可以使用DAX,分别是度量值、新建列和新建表,这三个功能并成一排摆放在这里,如图所示,

之前的文章中曾介绍了度量值和计算列的异同(收藏 | Power BI计算列和度量值,一文帮你搞清楚),这篇文章再来带你认识度量值和新表的异同。

度量值和计算列容易混淆,但和新表好像并不会搞混,毕竟一个是值,一个是表,区别还是很大的。

但在实现特定的业务需求上,他们又都可以实现,下面以一个案例来介绍。

该案例来自知识星球中星友的提问,模拟一个订单表,包含客户名称、产品名称以及产品类目等,如下图:

需求:

仅购买过一个产品类目的客户有哪些?

购买过多个产品类目的客户有哪些?分别购买了哪些类目?

下面以新建表和度量值两种方式来实现。

新建表

因为这个需求返回的客户肯定不止一个,所以很自然的想到用新表的方式。

这个问题的关键是先统计出每个客户购买了几个类目,然后分别返回购买了一个和多个类目的客户列表就行了。

用DAX处理很简单,如下图,

先使用SUMMARIZE进行统计,然后FILTER返回等于1的表,只有B和C两个客户仅购买过一个类目的产品。

同理,购买了多个类目产品的客户可以这样写,

对于购买了多个类目的客户,还要列出来购买了哪些类目,可以在上面这个代码的基础上优化一下:

返回的表正好是需要的效果。

但是通过这种方式返回的客户列表是固定的,因为它的上下文已经被固化了,无法根据外部的筛选器返回不同的列表。

如果想要动态的实现需求,比如按照日期切片器,计算不同时间段的客户列表,怎么办呢?

动态的效果还是要靠度量值。

度量值

这种方式比较直接,只需要建两个简单度量值:

类目数量= DISTINCTCOUNT('订单表'[产品类目])

类目列表=

CONCATENATEX(

SUMMARIZE('订单表','客户表'[客户],'订单表'[产品类目]),

'订单表'[产品类目],"、")

这两个度量值的代码是不是要比新建表的DAX简单的多?你可以先思考一下是为什么?

把这两个度量值放入到矩阵中,客户名称作为行标题,就是我们要的效果,

想查看购买过一个类目或者多个类目的客户列表,使用筛选器就可以了,

并且它也可以动态响应外部筛选器,返回不同的结果,

就是这么简单。

总结

通过上面的示例,应该可以看出二者的区别,虽然都能返回一个特定的结果,但度量值更有优势:

代码更加简短,因为无需在代码中指明上下文;

计算更加灵活,因为它可以根据不同的上下文,实现动态的计算。

最根本的区别还是在于上下文,包括之前介绍过的计算列,三者比较,同样如此。

所以当你有了一个分析需求,想用PowerBI实现时,不要一上来就想DAX怎么写,用什么函数,而是先梳理自己的需求,审视自己的数据:

想要静态还是动态的效果?

是用新建表、计算列还是度量值来实现?

不同方式下,能提供的上下文是什么?

这个上下文是否有对应的维度表?

维度表与事实表是否已经建立了正确的关系?

最终的落脚点还是数据建模!

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券