以下内容节选自《DAX权威指南:运用Power BI、SQL Server Analysis Services和Excel实现商业智能分析》一书!


--正文--

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在那些讨论Power Pivot数据模型的Excel社区和讨论Power BI与SSAS数据模型的商业智能(BI)社区中逐渐流行起来。

DAX是一门跨多产品的分析语言,这些产品使用同一个名为Tabular的内部引擎。

出于这个原因,我们经常用表格模型(Tabular Model)作为这些产品的共同特征。

DAX是一门容易理解的语言

也就是说,DAX和大多数编程语言不同,它更容易入门,但熟悉它的一些新概念可能需要一些时间。

如果你具有Microsoft Excel编程语言经验,想要学习DAX,却不知如何开始,那么下面就给出一些Excel用户学习DAX的建议

你可能已经知道DAX与Excel公式有些相似。毕竟DAX脱胎于Excel Power Pivot,其开发团队试图保持这两种语言的相似性,这使得用户向这种新语言的过渡更加容易。

然而,它们仍有一些非常重要的区别。

01

单元格和智能表格

Excel对单元格执行计算,单元格通过坐标引用。因此,你可以这样编写公式:

= (A1 * 1.25) - B2

DAX则不同,单元格和坐标的概念在DAX中不存在。

DAX处理的是表和列,而不是单元格。

所以,当你写DAX表达式时,只能引用表和列。

表和列的概念在Excel中司空见惯。实际上,如果将Excel中的某个范围定义为智能表格(使用创建表功能),那么你可以在Excel中编写引用表和列的表达式。

在下图中,你会看到为SalesAmount列计算的表达式引用了同一个表中的列,而不是工作簿中的单元格。

在Excel中,你可以使用[@ColumnName]格式引用表中的列,其中ColumnName是要引用的列的名称,@符号表示“获取当前行的值”。

虽然语法直观,但通常不会这样编写表达式,你只需要单击目标单元格,Excel负责插入正确的代码。

你可能认为Excel有两种不同的计算方式:使用标准单元格引用(在这种情况下,单元格F4中的公式应该是E4*D4),或者使用列引用(如果在智能表格中计算)。

使用列引用的优点是,可以在列的所有单元格中使用相同的表达式,而Excel为每行使用不同的值来计算公式。

与Excel不同,DAX只适用于表结构,所有表达式都必须引用表中的列。例如,在DAX中编写这样一个乘法公式:

Sales[SalesAmount] =Sales[ProductPrice] * Sales[ProductQuantity]

如你所见,每个列都以表名为前缀。

在Excel中,不需要提供表名,因为Excel公式在单个表中计算。

但是在DAX中,则需要指定表名,因为DAX在包含多个表的数据模型中工作,来自不同表的两列可能具有相同的名称。

DAX中的许多函数与其在Excel中的同名函数工作原理相同。

例如,IF函数在 DAX和Excel中是一样的:

Excel IF ( [@SalesAmount] > 10,1,0)DAX IF ( Sales[SalesAmount] > 10,1,0)

Excel函数的语法和DAX的一个不同之处是引用整列的方式。你可能已经注意到,[@ ProductQuantity]中的@表示“当前行中的值”。

当使用DAX时,你不需要刻意指定当前行,DAX的默认行为是获取当前行中的值。

在Excel中,如果需要引用整列的值,即该列中的所有行,则可以通过删除@符号来实现,如下图所示。

AllSales列在所有行中的值都是相同的,因为它是SalesAmount列的总计。

换句话说,引用当前行中的值与引用整列的值之间存在语法差异。

DAX则不同。

在DAX中,你可以这样写上图所示的AllSales表达式:

[AllSales]:= SUM ( Sales[SalesAmount] )

获取列中特定行的值与将列作为一个整体使用,这两种用法之间没有语法差异。

DAX知道你想要对列的所有值求和,因为你在聚合函数(在本例中是SUM函数)中使用了列名作为参数。因此,虽然Excel在检索数据时需要用明确的语法来区分这两种类型的数据,但DAX以一种自动的方式消除了歧义。对于初学者来说,这可能会让人困惑。

02

Excel函数和DAX:两种函数式语言

Excel函数和DAX这两种语言非常相似的地方是,它们都是函数式语言。

函数式语言是由基础函数调用的表达式组成的。

在Excel函数和DAX中都没有语句、循环和跳转的概念,而这些概念在许多编程语言中都很常见。

在DAX中,一切都是函数表达式。

对于使用不同语言的程序员来说,DAX的这种特性通常是一个挑战,但对于Excel用户来说,这一点也不奇怪。

03

使用迭代器

迭代器可能是你遇到的一个新概念。

在Excel中,你可能习惯于一步步地执行计算。

在前面的示例中,为了计算总销售额,创建了一列,求价格乘以数量的结果,然后将其求和以计算总销售额。这个结果很有用,例如,它可以作为计算每个产品销售额百分比的分母。

使用DAX,可以通过使用迭代器在单个步骤中执行相同的操作。迭代器完全按照其名字表示的意思来执行:迭代整个表,并对表的每一行执行计算,最后聚合结果以生成所需的单个值。

在前面的示例中,可以使用SUMX迭代器计算总销售额:

[AllSales]:=SUMX (Sales,Sales[ProductQuantity] * Sales[ProductPrice])

这种方法既有优点也有缺点。

  • 优点是,可以在单个步骤中执行许多复杂的计算,而不必为此添加许多列,这对某些特定的公式有用。
  • 缺点是,使用DAX编程的直观性不如Excel。实际上,你观察不到那个将价格和数量相乘的虚拟列,它只是短暂地存在于公式运行的时候。

你仍然可以选择创建一个计算列来计算价格和数量的乘积。

然而,这不是一个好的做法,因为它使用了更多的内存,并可能会降低计算速度,除非你使用了DirectQuery和聚合表。

03

DAX相关理论

需要明确的是,学习DAX需要先从理论开始,这并非不同编程语言之间的区别,而是思维方式的不同。

你可能已经习惯于通过网络搜索来找到解决某个具体问题的复杂公式或方案。

当你使用Excel时,很可能会发现有一个公式几乎能满足你的需求。

于是,你复制这个公式,稍做修改就解决了问题,而不必考虑它的工作原理。

该方法适用于Excel,但不适用于DAX。在能够写出好的DAX表达式之前,你需要学习一些理论并彻底理解计值上下文是如何工作的。

如果没有一定的理论基础,你会觉得DAX像变魔术一样得到了正确的结果,或者得到没有意义的奇怪数字。但问题不在于DAX,而是你还没有完全理解DAX是如何工作的。

幸运的是,DAX的理论只限于几个重要的概念,《DAX权威指南》一书中会进行详细介绍。

一旦你掌握了原理,DAX对你来说就不再神秘了,学习DAX主要是积累经验。

然而,请不要试图走得太远,除非你很好地吸收并掌握了计值上下文。

记住:了解原理只是成功的一半。

▊《DAX权威指南》

[意] Marco,Russo(马尔·科鲁索),Alberto,Ferrari(阿尔贝托·拉里) 著

高飞 译

  • DAX里程碑式经典教材,亚马逊4.8分(总分5分)
  • 本书的目的,让你真正掌握DAX!
  • 微软MVP,Power BI极客 翻译
  • 原书作者、DAX之父、ExcelHome 创始人、Power BI MVP力荐

本书是微软DAX语言在商业智能分析、数据建模和数据分析方面的指南。

通过对本书的学习,你将了解如何使用DAX语言进行商业智能分析、数据建模和数据分析;你将掌握从基础表函数到高级代码,以及模型优化的所有内容;你将确切了解在运行DAX表达式时,引擎内部所执行的操作,并利用这些知识编写可以高速运行且健壮的代码。

Excel用户如何学习数据分析语言DAX?相关推荐

  1. 『对比Excel,轻松学习Python数据分析』新书发布

    之前在公众号提过,我写了一本书,现在这本书终于面世了,这本书就是『对比Excel,轻松学习Python数据分析』,这本书是写什么的,以及这本书怎么写的,相信大家通过书名就能了解一二,但还是有必要专门写 ...

  2. 好书推荐:《对比Excel,轻松学习Python数据分析》

    之前就一直有打算出一个结合Excel的Python数据分析的教程,刚好张俊红同学就出了书籍,后面写相关文章又多了一本好书.我首先说说我的看法,为什么要和Excel做结合了. Excel大家都熟悉,结合 ...

  3. asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02

    本文主要梳理<对比Excel,轻松学习SQL数据分析>对于自己有用的sql知识.这本书中的所有代码和函数均适用于my sql 8.0版本. SQL的基本功能数据定义(DDL)--对数据库, ...

  4. 为什么R语言是学习数据分析的第一选择

    数据时代已经到来,但数据分析.数据挖掘人才却十分短缺,据全球顶尖管理咨询公司麦肯锡(McKinsey)一份详细分析报告显示: >>>> 预计到 2018 年,大数据或者数据工作 ...

  5. python和excel的区别-对比Excel,轻松学习Python数据分析

    阅读权限50威望2 级论坛币2119 个学术水平357 点热心指数383 点信用等级313 点经验103301 点帖子917精华在线时间8677 小时注册时间2012-3-28最后登录2020-10- ...

  6. R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)

    前言:本文为个人学习笔记,为各大网站上的教学内容之综合整理,综合整理了①假设分析的基础知识.②正态性检验和方差齐性检验在SPSS和R语言中的操作.③t检验(单样本.双独立样本.配对样本)在Excel. ...

  7. 学习excel数据分析_为什么Excel是学习数据分析的最佳方法

    学习excel数据分析 它是视觉的,它是透明的,并且使事情变得简单. (It's visual, it's transparent, and it keeps things simple.) The ...

  8. 独家 | 手把手教你学习R语言(附资源链接)

    作者:NSS 翻译:杨金鸿 术语校对:韩海畴 全文校对:林亦霖 本文约3000字,建议阅读7分钟. 本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者 ...

  9. 超级干货 :手把手教你学习R语言(附资源链接)

    作者:NSS:翻译:杨金鸿:校对:韩海畴,林亦霖: 本文约3000字,建议阅读7分钟. 本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开 ...

  10. 手把手教你学习R语言

    本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开始,如何进行,选择什么学习资源.虽然网络上有许多不错的免费学习资源,然而它们多过了头,反 ...

最新文章

  1. 操作系统原理之磁盘调度
  2. JavaScript深入【表达式和运算符(上集)】你能过我8关js运算符的题目吗?
  3. RPG+模拟经营,《喧嚣的城堡》如何做闭环设计?
  4. 通用的MIME类型:application/octet-stream
  5. php网站评论模块怎么写,模块内容评论循环
  6. 如果正确看待区块链这一新型技术的未来发展?...
  7. java secondtotime_Java中的LocalTime toSecondOfDay()方法
  8. Spring MVC学习总结(9)——Spring MVC整合swagger自动生成api接口文档
  9. linux   find acm time
  10. 实验五 编写、调试具有多个段的程序
  11. 主板 B85 + 核显HD4600 , EFI 安装黑苹果
  12. 宝马「试水」神经形态芯片
  13. phpcms后台登陆页面存放地址
  14. docker 定时重启脚本_定时启动docker容器
  15. 谷歌浏览器设置关闭搜索记录
  16. Intellij IDear关闭页面浏览器显示图标
  17. 微信小程序开发—— tabbar 配置
  18. [转]全图形PPT设计指南
  19. 如何启动Android SDK 1.5模拟器
  20. 【无NK ZOOM KOBE 5 Protro ”Bruce Lee“S2纯原生产线 科比五代李小龙

热门文章

  1. 线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(二)
  2. PHP Xdebug调试专题
  3. maven tomcat eclipse 配置 debug
  4. python学习之-文件和对象
  5. Android开发中图表的使用
  6. JAVA JDK 、Maven、IDEA安装
  7. Atitit java集成内嵌浏览器与外嵌浏览器attilax总结
  8. Animation中的scale、rotate、translate、alpha
  9. Discuz = 7.2 SQL注入漏洞详情
  10. ExtJS2.0.1 ColumnTree控件使用心得