DAX学习分享:十条经验

2019-08-07 14:58:21 浏览数 (3)

很多人说国内的学习资料太少,在学习的过程中坎坷不断,我与大多数PowerBI学习者一样,一边读外文的博客摸索一边铺路,在不断尝试和与人分享的过程中,总结了个人认为最宝贵的十条DAX学习经验,分享给读者。

理解上下文

学习DAX的难点在于理解上下文概念,一旦想通了这个,就好比打通了任督二脉,青云直上。只是这个概念被一些计算机专业词汇搞得妖魔化了,然而究其本质极其简单。

以“四大皆空”这个词举例。

除了上述旧意和新意外,你还可以说“我出国旅游一圈回来,四大皆空”,意思是钱包、银行卡、支付宝、微信账户都花光了。汉语博大精深,同一个词在不同的语境下表达的意思都可能不同。

而这不同的语境就好比DAX的“上下文”。使用不同的切片器、筛选器、数据透视表的行和列,都会创造不同的“语境”(筛选上下文)。在不同的表中新建计算列,也会有不同的“语境”(行上下文)。

自然而然,度量值、计算列在不同的语境下输出的结果也会不同。这个道理就是“毕竟西湖六月中,风光不与四时同”。懂得了这点,你会少走很多弯路。

所以,第一条经验是,在写公式之前,先理解上下文是什么。

使用度量值,而不是计算列

在PowerBI中有三个地方可以写DAX公式:度量值、列、表。这三者理想的使用频率是由大到小,度量值>列>表。

很多人刚开始学习PowerBI时,喜欢使用计算列,然而这意味着你并没有体验到PowerBI的精华。计算列不是什么新知识,就好像在Excel中使用Vlookup添加一列一样,这一列是基于现有的表基础上做运算,它是“静态”的,运算结果不会因为切片器或透视筛选而变化,当你建立好后,它就会保存在文件中,增加你的内存,影响你的文件运转速度。

而度量值是什么?它被称作“Excel20年历史上最好的事情”和“移动的公式”,让你实现了质的飞跃,其灵活性可以说传统Excel、VBA、甚至其他计算机语言都望尘莫及。

比如在上一篇文章中最实用的帕累托分析模板, 求每种商品由大到小的累计金额,添加计算列的方法只能输出当前表中的结果,而使用度量值你可以做到ABC动态产品分类。求北京市、咖啡大类、2017年3月份的ABC,这是瞬间就可以完成的事情。

所以这第二条经验是,使用度量值,在不得已的情况下再去考虑使用计算列。

思考DAX的逻辑

我一开始学习DAX是急功近利,不懂公式的基本逻辑,直接套用到实践中使用。这是件很麻烦的事情,欲速则不达。

所以我建议先掌握公式的基本逻辑再来应用,你就可以做到以不变应万变的效果。无论哪个场景,哪个行业,金融、制造、电商、餐饮...无论哪个岗位,财务、人力、销售...只要是用数学表达式能够得到的指标你基本都可以找到通用的DAX方法实现度量。

有人建议我把DAX函数归个类,便于框架梳理学习。我是这样想的:

第一,去微软的官网你可以看到清楚的分类(时间、文本、统计、筛选函数等等)

第二,我更喜欢简单地把所有函数都分为两类,筛选和计算。

下图这个图是我经常用来脑补DAX的工作原理,度量值和计算列都是先执行筛选再来计算,而所谓的“DAX用作查询语言”其实就是主要应用了筛选功能,所以某些观点“DAX查询将取代数据透视表”是没有道理的,一个东西你只用了一半的功能,那不是半吊子吗?

这第三条经验是,按照筛选 计算的逻辑思考你的公式。

数据模型的布局

虽然下面这张图只有六张表,但上手这几张表的第一反应我还真是无从下手。当你的表越来越多,模型可能会像地下管道一样错综复杂,甚至干扰你的思路。

专业布局的方式有星型和雪花型,这两种布局的概念都要学习了解,但是在使用中我更推荐一种简单的思考方式,在Matt的《Learn to write DAX》书中提出的Lookup表在上,数据表在下的方式。这种布局很清晰,而且有助于按照箭头自上而下来思考公式的逻辑。

第四条经验,最佳入门布局,Lookup表在上,数据表在下。

数据类型

为什么图表不对?为什么地图没有正常显示?为什么两表之间无法建立关联?为什么输出的结果很奇怪?为什么公式报错?

你可能遇到很多这样的情况,最后找到的答案都是一个。第一时间到编辑查询器和建模界面中,去检查数据类型、格式、分类的设置是否正确。这往往是无意识发生的错误,即便是PowerBI高手。

学会组装

使用PowerBI建立一个商业分析模型,就好像组装一样,你不可能一下子把所有的零件都拼装起来,而是分步完成,最后再整合到一起。

同样的道理,我不建议你把公式都写到一个度量值中。比如,当你求拿铁咖啡销售量时: 你可以写[销售量]=sum('销售明细表'[数量])和Calculate([销售量],'产品表'[咖啡种类]="拿铁") ;也可以一气呵成地写Calculate(sum('销售明细表'[数量]),'产品表'[咖啡种类]="拿铁")

我会建议使用第一种方法,分开来做。不要因为[销售量]这个度量值很简单就不去写。因为你在后续工作中求环比、同比增长率、单店平均值等等都会重复利用到它。而且这样的方式更便于梳理逻辑和修正错误。

第六条经验,让我们一步步来,一口吃个胖子消化不好。

使用PowerBI并下载最新版本

在另一篇文章中从Excel到PowerBI的5个理由, 曾经提及过PowerBI对比Excel的优势。如果是仅仅完成多个文件的汇总整理,没有后续的分析和可视化工作,你完全可以使用Excel的编辑查询器。

但是写DAX做建模分析,我更倡导使用PowerBI,除了更简单友好的界面,更稳定、更快速的引擎外,像新建表、双向箭头应对多对多关系等功能Excel是不具备的,或者操作起来需要绕弯路才能实现。并且新增的DAX公式也会第一时间在PowerBI中上线。随着新功能的不断增加,拥抱未来是早晚的事。

这就好比工作电脑要会用windows, 日常手机用Android或IOS。第七条经验,在没有什么一统江湖的产品之前,让我们采用取长补短策略 Excel PowerBI=Better Together 。

逆向思维

高效人士的习惯之一是“以结果为出发点”的思维方式。在搭建模型前,先想好两个问题:

你有什么?你想要什么?

明确了目标,有了设计的雏形再付诸行动。如果这两个问题没有想明白就上手写公式,很容易误入歧途、白费工夫。

同样的道理,你要知道学习PowerBI是用来做什么。

如果你的目标是解决重复性的多文件汇总和自动化基础数据清洗工作,先学PowerQuery;如果你想实现多维度的商业指标分析,就一定要攻克最核心的PowerPivot建模;如果是想利用PowerBI做出炫酷的可视化效果,那就钻研各种自定义图表。如果目的是企业级部署,你需要研究产品的特性和共享协作方案。

不同的目标,学习的侧重点也会大有不同,而前提是你要知道你想要的是什么。

能抓住耗子就是好猫

传统Excel、PowerQuery、PowerPivot数据建模,虽然工具不同,但很多时候能够实现的目的是相同的。比如在Excel中可以使用最简单的Vlookup来查询另一张表中的对应结果,在PowerQuery中可以通过合并查询来实现,在PowerPivot中也可以用Related或者Lookupvalue完成同样的效果。

没有绝对的最好方法,这取决于你的应用场景和个人习惯问题。总体来讲,我认为无论白猫黑猫,能抓住耗子的就是好猫。

在这个基础上进行优化选择时,大多数的场景可以采用就近原则来判断,即距离数据源较近的方法。比如能在数据源头(向IT部门提需求或者利用SQL取数时)达到理想的数据形式,一般是最优解。其次是在PowerQuery中进行编辑,最后再选择PowerPivot。

三种境界

清代文学家王国维谈读书有三大境界,我想学习DAX亦是如此。

第一大境界,昨夜西风凋碧树,独上高楼,望尽天涯路。

当你在众多的工具中选择了PowerBI,选择了DAX,这绝对是一处可以让你站得高,看得远的高楼。在这个环节,你已经知道了DAX是什么,能给你带来什么,接下来需要的是带着求知的心态坚持走下去。

第二种境界,衣带渐宽终不悔,为伊消得人憔悴。

很多学习DAX的人谈到自己的心得是上班路上思考逻辑,甚至梦中也在写公式...如果你有这样的经历,恭喜你,距离成功不远了。

第三种境界,众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

当你顿悟了这门知识,回首过来,原来一切并没有那么复杂。而这个时候,DAX已经成为了你必杀技,随手一用都可以震撼你的老板和同事。

以上是我总结的十条宝贵经验,有些也是我自己走过的弯路。我不相信有什么几周内成为分析师的一说,或者7天速成一门计算机语言。但我已经看到很多人在学习了DAX数月之后,那种站在Excel的肩膀上,超越Excel,笑看过往的喜悦。

你,到了第几层境界了呢?

0 人点赞