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

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

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

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

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


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

需求:

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

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

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

新建表

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

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

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

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

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

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

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

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

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

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

度量值

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

类目数量 = DISTINCTCOUNT('订单表'[产品类目])
类目列表 =
CONCATENATEX(
SUMMARIZE('订单表','客户表'[客户],'订单表'[产品类目]),
'订单表'[产品类目],"、")

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

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

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

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

就是这么简单。

总结

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

代码更加简短,因为无需在代码中指明上下文;
计算更加灵活,因为它可以根据不同的上下文,实现动态的计算。

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

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

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

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

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

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

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

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


(0)

相关推荐

  • PowerBI中DAX语言的上下文是什么

    什么是上下文 上下文就是DAX公式计算时所处的环境 列如:=SUM(FactSales[SaleAmount]) 这个公式解读为计算所有销售金额的总计 但是一般的透视表中常见的一种情况就是,产品按照类 ...

  • 为什么学不会Excel超级透视表?

    数据透视表,作为简单.易上手.高效的数据分析工具,受到了办公一族的喜欢,但是有些需求普通透视表又无法完成,比如求超过平均数的有多少条记录? 如何把对应部门人员合并到一个单元格中显示等等!但是这些超级透 ...

  • DAX Patterns | 关于时间的标准计算

    关于这个模式 在这个模式中,我们将向你展示如何使用标准日历计算与时间相关的计算,如年初至今.去年同期和百分比增长.使用标准日历的最大优点是:你可以依赖多个内置的时间智能函数.内置函数的设计方式是为最常 ...

  • Power BI Desktop 中的 DAX 基本概念

    在 Power BI Desktop 中应用 DAX 的基础知识 2019/10/21 M o 本文适用于刚开始使用 Power BI Desktop 的用户. 为你提供有关如何使用数据分析表达式 ( ...

  • PP-DAX入门:无动态,不智能——谈谈DAX函数的计算环境(筛选上下文)问题

    小勤:BI(商务智能)到底有什么不一样啊?倒来倒去到最后不也是出一堆的图或表吗?Excel里不也可以弄吗? 大海:对的,Excel里当然也可以做图表,而且还能做得很漂亮,而且可以做得很个性化,但你有没 ...

  • Power BI 度量值 | 累计聚合

    经常碰到本年至今.本月至今的数据计算,其实还有一类计算是,从历史最早日期至今的累计计算,比如从开业到现在总共卖出了多少件商品,累计实现了多少销售额等. 本年累计称为YTD,历史至今的累计是不是可以称为 ...

  • Power BI 度量值 | 滚动聚合

    上一篇文讲了累计聚合,这篇文章继续讲一下滚动聚合,比如常用的MAT计算,Moving Annual Total,滚动年度总计,即向前滚动12月的合计数. 滚动年度求和,也经常用于财务上的滚动预算,看完 ...

  • Power BI里的数据透视表怎么长这样?肿么办?

    小勤:Power BI里这个数据透视表怎么设置啊?我放了三个维度到行里,可是怎么只能显示一个维度? 大海:因为Power BI默认可以按维度进行逐层钻取的啊.比如你想看下一层"货主城市&qu ...

  • 收藏 | Power BI计算列和度量值,一文帮你搞清楚

    对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来是度量值的DAX用在了计算列上,或者相反. 即使是已经学习了很长时间的人,对 ...

  • 如何在Power BI文件之间批量复制度量值?

    文/瓶子 目前从事职考行业的数据运营,喜欢钻研power bi和excel来实现自动化. 这几天在星球里面分享关于Tabular Editor内容比较多,应星主邀请,编辑一篇关于TabularEdit ...

  • Power BI如何对度量值分组统计?

    经常碰到有同学问,如何对度量值进行分组统计,比如有一个环比度量值,怎么将环比划分为几个档次,然后统计数量分别是多少? 其实度量值只是一个值,并不存在对它分组的问题,真正的问题应该是,如何对某个维度分组 ...

  • 要导出所有Power BI数据表?用DAX Studio一键搞定!

    经常有朋友问,想导出Power BI Desktop里已经清洗好的数据表,但做成视觉对象后导出数据量有限制,复制表也很麻烦. 那么,怎么能将PBI里的数据方便地导出来呢?甚至导出其中所有的表数据呢?其 ...

  • 什么是雪花维度?Power BI里如何降低模型复杂度?

    关系模型是Power BI的独特优势,但是,在日常数据分析中,过多的表间关系,会使得数据模型变得非常复杂而且难以分析. 因此,在合适的情况下,借鉴其他BI工具(如SAP BW等)的"并表&q ...

  • 通过条件表筛选其他表,Power BI可以这样做

    数据分析就是筛选.分组.聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特定的维度值构成的表,作为条件表来筛选原始表. 也就是说,根据一个表,来筛选另外一 ...