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

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

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

 

29
说点什么

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

您好,我今天第一次遇到咱们网站。我很受用。我想问,如果学好了BI工具,可是没有实际的公司项目经验,怎么样找到工作呢? 考证吗?很困惑求指点。

bruce
游客
bruce

DAX圣经的内容是不是删掉了?原来左边有导航栏

juexingzhe
游客
juexingzhe

pbi仅支持日期表设置主键???我设置序号也可以啊!

东军
成员
东军

关系型数据库里,这些基础概念无处不在,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

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