从数据到信息
从信息到洞察

DAX是什么

DAX 全称 Data Analysis eXpressions,是面向 Microsoft Power BI、Microsoft SQL Server Analysis Services (SSAS)和 Microsoft Power Pivot for Excel 的编程式数据分析语言。它创建于 2010 年,随 Power Pivot 的第一个版本 PowerPivot for Excel 2010 一起发布。随着时间的推移,DAX 已经在商业智能和 Excel 社区中逐渐流行起来。

DAX 适用范围

DAX 的简单和复杂

微软在官方的介绍中称 DAX 是一种简单的语言。也就是说,DAX 的基本知识简单易学:你可以在几小时内开始使用。这确实是事实,微软在开发 DAX 的时候从 Excel 中移植了很多函数,它们名称相同,参数用法也类似。但我想告诉你的是,这种简单仅限于起步阶段。DAX 和大多数编程语言不同,它有很多独特且重要的理论,一旦涉及到这些概念,比如计值上下文、迭代和上下文转换,一切都将变得复杂起来。但不要放弃!请保持耐心。一旦你的大脑开始理解这些概念,你就会发现 DAX 确实是一种简单的语言,只是需要时间去适应。

学习 DAX 的误区

不同于其他语言,DAX 需要你理解它的原理之后才能熟练使用,如果你习惯于通过学习具体的函数建立起一门语言的知识体系(比如 Excel 函数),请千万不要将这种习惯带入到 DAX 的学习中。因为它的一些原理很难通过归纳法(从具体实例推导出普遍规律的一种方法)来理解。例如,对计值上下文(The Evaluation Context)的理解需要用到演绎推理:先接触理论本身,然后通过案例加深对理论的理解。我知道许多人不习惯这种学习方式,他们更喜欢在实践中学习,先研究如何解决具体问题,然后通过不断的练习和积累,归纳出公式背后的原理。如果你使用这种方式学习,会常常发现写出的公式能得出正确结果,但自己却不明白为什么。

DAX 的理论基石

以我的观察,有太多的学习者在这上面走了弯路,他们把之前学习其他语言的方法套用在 DAX 上,以为只要学会了函数也就掌握了这门语言。所以在这里我还想再强调一次,函数本身并不复杂,真正的复杂性蕴含于 DAX 公式的计值过程中,在简单的计算中你可以忽略它的存在,而一旦问题变得复杂,公式的计值流就会开始变得难以理解

DAX 的优势

前文我们提到过,DAX 可以运行在 Power BI、SQL Server Analysis Services (SSAS)和 Power Pivot for Excel 中,本质上它们都是 SSAS 的表格模型,只是形式略有不同。Power Pivot for Excel 运行了一个 SSAS 表格模型的本地实例,而 Power BI 使用一个单独的进程运行一个特殊的表格模型实例。这是一个基于内存的列式数据库分析引擎

DAX 引擎

DAX 的能力蕴含在 SSAS 表格模型的引擎,我们称之为 VertiPaq 引擎,这是它在开发阶段的工程名称,大家已经习惯用这个名称代替它的官方用名「xVelocity 内存分析引擎」。

Vertipaq 是基于内存的列式数据库引擎模型的所有数据都驻留在内存中。在 Vertipaq 引擎内部,数据以列式存储,而传统的 SQL 数据库引擎通常使用行式存储。简单的说,行式存储适合进行事务处理(OLTP),比如增删改查。而列式存储则适合分析决策(OLAP),比如多维分析。

行式存储和列式存储  图片来源:网络

列式数据库有几个优点:

  • 高效的压缩比
  • 不靠索引来优化查询
  • 更适合大量的数据
  • 天生适合聚合运算

在这个基础上,基于内存的列式数据库还有比硬盘快 10 倍左右的数据读取速度,这也是为什么当今主流的 BI 工具和大数据分析工具全部采用内存式数据库的原因。所以 DAX 是非常适合计算的语言,我曾经在Excel Power Pivot 里测试过装载并分析一亿行数据,理论上完全没有问题。关于 DAX 引擎,后面会有专门的章节详细分析,这里我们只做最简单的介绍。

DAX 能分析多少数据

你已经了解了这颗引擎的强大之处,它绝不是吃素的,它带给你的一个直观感受就是数据处理能力的飞跃

Excel 加载一亿行数据

  1. Excel:将 Excel自身的数据处理能力提升到了前所未有的高度,复杂公式几千行数据就跑不动?vlookup 几万条就开始卡顿?不存在的,Power Pivot 让你可以轻松处理几百万乃至上千万的数据,即使一些复杂的计算逻辑,DAX 引擎也能在眨眼间完成计算。
  2. Power BI Desktop:引擎版本比 Power Pivot 更高,性能也有所提升,不过这种提升不太容易被量化。一般来说,处理相同数据量级和复杂度的分析,比 Excel 表现要好。
  3. SSAS:具备完整的 DAX 引擎,处理能力最强,可以参考下面这张表

SSAS 可以处理的数据量及建议

与其他 BI 工具相比,Power BI 的一大特点就是拥有自己的数据引擎和分析语言,靠的是微软在数据库领域深厚的积累,绝非一日之功。

动态计算的能力

除了能分析大量的数据,DAX 还可以根据计值环境(筛选上下文)的变化,自动重新计算。这是商业分析一项非常重要的能力,在解读数据报告的时候,我们需要基于业务特点不断的提出新的问题,并且这些问题需要立即得到回答,这样才能最大程度挖掘数据的价值,而不是像过去那样,分析师重新写 SQL,重新运行,然后所有人等待结果。

这也是 DAX 和 Excel 公式、VBA 或者 PQ 的一个最大的不同,这些语言都没法做到 DAX 一样的灵活性,它们必须重新编辑公式、再次点击运行然后等待结果产生,而DAX 可以默默帮你完成所有步骤。允许你以思维的速度展开分析

这种动态计算的能力也是所有 BI 工具的标配,并非 Power BI 独有。值得一提的是很多分析语言,比如 SQL,Python,R 也可以实现类似的灵活性,比如 R 的 Shiny 可以动态计算。但需要做二次开发,不适合没有技术背景的普通业务人员,

DAX 可以根据环境的变化自动重新计算,但严格来说,它不是动态语言,后者编程语言中的一个专有名词:动态类型语言,是指数据类型的检查是在计算时进行的。用动态类型语言编程时,不用给变量指定数据类型,语言会在你第一次赋值给变量时,在内部记录数据类型

总结

「一身转战三千里,一剑可当百万师」,DAX 是一门强大的语言,它让没有任何 IT 背景的普通人借助 Excel 这样的平民工具就可以处理几百万、上千万行的数据;完备的函数体系允许你将复杂的业务逻辑抽象成一个个公式,根据外部筛选条件的变化,这些公式可以瞬间完成计算并返回结果。在过去,这种分析可能需要依赖 IT 长达几小时或数天的反馈才能完成。借助 DAX,普通业务人员对数据的分析能力将可以实现质的飞跃,还可以更容易的从 Excel 切换到 SSAS 这样的企业级 BI 工具。

DAX 不是一门轻易就可以掌握的语言,你需要学习它的理论,并通过做题来反复实践,在这个过程中你的认知会一次次的建立,又一次次被推翻,不要灰心,这是所有初学者的必经之路,你并不孤独。不要被眼前的挫折困扰,因为你的所有投入终将获得回报。

千里之行,始于足下,让我们从这里开始,一起进入这个全新的领域。

本文经「原本」原创认证,作者 PowerBI 极客,访问 yuanben.io 查询【4LBHVOE6】获取授权信息

 

109
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
57 评论数
63 被回复的评论
60 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
Clarlechen

请问高大神,数据模型中一级品类和三级品类对事实表是一对多的关系
根据筛选上下文的单向传递的原则,一级和三级两个维度表在矩阵中应该是笛卡尔积的关系,但是这边正常进行筛选了 求解
PS 事实表中有这2列,两个维度表是用values建成的表

数据模型.png
一级和三级维度表.png
成员
安菲尔德

Mark一下 感谢高老师

游客
pswmz

记录一下

成员
hrshnfgng

开始进入power BI的世界,感谢作者的辛劳❗

成员
Chusita

打卡20230731

游客
hhh

147 页解释说,结算错误和重复行多少有关系,这个解释有点不明白啊

成员
fzn002006

问个题外问题,power bi desktop中可以创建计算项,那可以直接在里面使用计算项吗?如果可以,如何使用?另外dax权威指南有没有出电子书的计划,这样方便在PC上边看边学边做案例,加深理解,不用翻纸质书那么麻烦。

游客
布鲁斯

感谢作者分享,很清晰直观

游客
Phoebe

记录一下,开始powerbi学习之路

游客
宗超

购买了《DAX权威指南》第2版,全书整体翻译质量较高,译文绝大多数比较准确。但发现在第10章第1小节中有个小错误:
原文:Actually, the value reported by QTD Sales at the year level is the value of the last quarter of the year,
译文:实际上,QTD Sales 在年份级别显示的数值是上一年最后一个季度的值,

游客
Gerry

开篇就写得很棒。感谢作者~

成员
maopooh

几乎之前所有的知识都是在实践中学习的,感谢作者在开篇就告知读者该如何学习

成员
shaynbird

写的很好,这是我的pbi开始之路,记录一下,希望有所小成可以回头看到自己的留言。

成员
压力君

老师你好,买了DAX权威指南,不过里面的配套案例在broadview网站上没有,请问如何才能获得呢?

成员
鱼人人美

老师,我是刚刚学习POWERBI的小白,请问是学习在线版DAX圣经还是需要买《权威指南》谢谢

游客
高志强

老大,啥时候出书呀,DAX2

成员
ke8880

2021年3月的更新已经支持在Calulate内直接书写多列条件,不需要借助Filter了。如下面的语句是允许的,而之前的版本会报错:

SalesRedW := CALCULATE(Sales[Sales Amount], Product[Color] = “Red” || Product[Style] = “W”)

游客
eric

非常期待中文版圣经出版

成员
hzykelvin

明天就踏入2月份了 你的书什么时候出啊

游客
胡杨

DAX权威指南第二版书在什么地方可以买到?

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数