DAX的历史

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

DAX的简单和复杂

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

学习DAX的误区

不同于其他语言,DAX需要你理解它的原理之后才能熟练使用,如果你习惯于通过学习具体的函数建立起一门语言的知识体系(比如Excel 函数),请千万不要将这种习惯带入到DAX的学习中。因为它的一些原理很难通过归纳法(从具体实例推导出普遍规律的一种方法)来理解。例如,对计值上下文(The Evaluation Context)的理解需要用到演绎推理:先接触理论本身,然后通过案例加深对理论的理解。我知道许多人不习惯这种学习方式,他们更喜欢在实践中学习,先研究如何解决具体问题,然后通过不断的练习和积累,归纳出公式背后的原理。如果你使用这种方式学习,会常常发现写出的公式能得出正确结果,但自己却不明白为什么。
DAX是什么 - 图2
以我的观察,有太多的学习者在这上面走了弯路,他们把之前学习其他语言的方法套用在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),比如多维分析。
DAX是什么 - 图3
列式数据库有几个优点:

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

在这个基础上,基于内存的列式数据库还有比存储在硬盘的数据库快接近10倍,这也是为什么当今主流的BI工具和大数据分析工具全部采用内存式数据库的原因。所以DAX是非常适合用于计算的语言,我曾经在Excel Power Pivot里测试过装载并分析一亿行数据,理论上完全没有问题。关于DAX引擎,后面会有专门的章节详细分析,这里我们只做最简单的介绍。
与其他BI工具相比,Power BI的一大特点就是拥有自己的数据引擎和分析语言,靠的是微软在数据库领域深厚的积累,绝非一日之功。

总结

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