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

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工具。

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

原创内容 转载请联系作者授权:PowerBI极客 » DAX是什么

36
说点什么

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

关系型数据库里,这些基础概念无处不在,OFFICE套件之一ACCESS便是如此。将外部文本数据源导入后,判断某列是否有重复值,我常会用添加主键的方式来处理,毕竟只要点几下鼠标,若有重复便会报错,比起公式函数判断要方便很多

银河九天
成员
银河九天

我已加入vip季度会员,仍看不见上面隐藏内容,是什么问题?高飞老师

天昕
成员
天昕

看来微软中国的Power BI跟的很紧嘛,上面链接的一些内容,我印象中前几个月还没有呢~日期9月9~~看来帮助也是需要经常翻翻的了

dony
成员
dony

感谢高飞老师指点迷津。
数据库设计三范式规则,总结如下:

– 1NF: 字段不可分
– 2NF: 有主键,非主键字段依赖主键
– 3NF: 非主键字段不能相互依赖

dony
成员
dony

高飞老师太厉害了,文采飞扬

A5121103420
成员
A5121103420

为什么开通了季度会员不能阅读全部内容和下载文件?

超哥
游客
超哥

知乎上乱窜,看到了这个有趣的网站,马上注册进来!
正对PBI感兴趣,多谢站长热心传道

V
成员
V

请问如何看这些板块内容阿??

wolf
成员
wolf

能多更一些就好了

James zhang
游客
James zhang

真的很感谢各位大神的无私奉献,让我们有机遇便利的系统的,学习新的知识。期待更多的文章。

wersdfzx
游客
wersdfzx

加油!期待!

okgo
游客
okgo

加油😄😄😄

A5121103420
成员
A5121103420

群主不是说统一给我们开季度会员吗 什么时候开呢?