本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
DAX里程碑式经典教材,□□□4.8分(总分5分)本书的目的,让你真正掌握DAX!!微软MVP,Power BI极客 翻译原书作者、DAX之父、ExcelHome 创始人、Power BI MVP力荐
《DAX□□指南》是微软DAX语言在商业智能分析、数据建模和数据分析方面的指南。
通过对《DAX□□指南》的学习,你将了解如何使用DAX语言进行商业智能分析、数据建模和数据分析;你将掌握从基础表函数到高级代码,以及模型优化的所有内容;你将确切了解在运行DAX表达式时,引擎内部所执行的操作,并利用这些知识编写可以高速运行且健壮的代码。
《DAX□□指南》第□版的重点内容包括基于免费的Power BI Desktop来构建和运行示例,帮助你在Power Bl、SQL Server Analysis Services或Excel中充分利用强大的变量(VAR)语法。你想要使用DAX所有的强大功能吗?那么这本未进行任何删减、深入浅出的著作正是你所需要的。
《DAX□□指南》适合Excel高级用户、商业智能分析人员、使用DAX和微软分析工具的专业人士。
前言
我们已经创作了大量关于DAX的内容,比如那些关于Power Pivot和SSAS表格模型的书、博客、文章、白皮书,以及一本关于DAX Patterns的著作。还有必要再为DAX另外写一本书吗?这门语言值得花这么多精力吗?当然,我们认为答案是肯定的。
当一本书诞生时,编辑首先关心的是它的页数。这一点之所以重要,是因为页数涉及定价、管理和资源的分配等。这多少让作者有一点沮丧。事实上,每次写书时,我们都需要谨慎分配关于产品(无论是Excel Power Pivot还是SSAS表格模型)和DAX语言描述所占的资源。没有足够的篇幅让我们对DAX畅所欲言的感觉是痛苦的。毕竟,你不可能写1000页关于Power Pivot的内容,这种体量的书对任何人来说都是一场噩梦。
因此,这些年来,我们在撰写关于Power Pivot和SSAS表格模型的书的同时,也编写了一本系统阐述DAX的书,只不过它暂时被封存。现在,我们决定打开封印,不再纠结摘录哪一部分内容——我们将介绍关于DAX的所有细节,不做任何删减,这就是本书的由来。
本书不介绍如何创建计算列,不告诉你在哪个对话框中可以设置哪些属性。因为这不是一本手把手教你使用Visual Studio、Power BI和Power Pivot的书。相反,它将深入介绍DAX语言,从入门开始一直到非常技术化的细节,来指导你如何优化自己的代码和模型。
在创作过程中,我们对它的每一页都爱不释手,无数次回顾这些内容,以至于可以倒背如流。每当我们认为有重要的内容要补充时,就会继续添加内容。这让本书的页数只增不减,因为每一页都是有价值的。在此期间,我们加深了对DAX的理解并且享受整个创作过程。
但还有一件事情需要说明,为什么你需要这样一本关于DAX的书?
在你□□次使用Power Pivot或Power BI之后可能就有了这种想法。拜托,你不是一个人,我们□□次使用之后也产生了这个困惑。DAX看起来太简单了!它和Excel函数是如此相似!而且,如果你学习过其他编程语言或查询语言,那么你可能已经习惯参照语法实例、套用已经掌握的思维模式来学习一门新的语言。这些都是我们在学习DAX过程中犯过的错误,希望你不要重蹈覆辙。
DAX是一门强大的语言,支持这门语言的分析工具正在不断增加。但在强大的背后,它的一些原理很难通过归纳法(从具体实例推导出普遍规律的一种方法)来理解。例如,对计值上下文(Evaluation Context)的理解需要用到演绎推理:先接触理论本身,再通过案例加深对理论的理解。我们知道很多人都不习惯这种学习方式,他们更喜欢在实践中学习,即先研究如何解决具体问题,再通过不断的练习和积累,归纳出公式背后的原理。如果你也希望使用这种方式学习,那么本书可能不适合你。我们另有一本书:DAX Patterns,它是一本面向实战的案例集,不包含公式原理的解释,也不会告诉你为什么公式写成这样效率更高,它适合让你以直接套用的方式解决实际问题。但本书的目的是让你真正掌握DAX。基于此,本书中所有的案例都是为了解释DAX语言的行为,而非解决特定问题。如果你发现书中的某些公式恰好可以应用到你的模型里,那么恭喜你。但请记住,这只是意外之喜,并非案例的本意。□后,请务必留意书中的注解,以确保理解案例中的代码所包含的陷阱。出于讲解的目的,书中使用的公式源码通常并非□佳实践。
希望你能和我们一起享受这段学习DAX的美妙旅程,就像当初我们写这本书时那样。
本书受众
如果你只是偶尔会使用DAX,那么本书或许不是□佳选择。市面上已经有很多书提供了DAX相关工具和语言本身的简明介绍,它们可以帮助你从零开始达到基础级别的DAX编程水平。我们对此非常了解,因为我们也写过类似的书。
而如果你是抱着认真的态度学习DAX,想要了解这门优美语言的所有细节,那么本书就是为你准备的。如果这是你学习DAX的□□本书,那么请不要期望太早领悟那些高级概念。建议你首先通读全书,等到积累一些经验后再重读那些□复杂的章节,那时你会对它们有更清晰的了解。
不同职位、不同目的的人都可以从DAX中获益,Excel用户可以利用DAX操控Power Pivot数据模型,商业智能(BI)专家需要在不同规模的BI解决方案中编写DAX代码,非专业Power BI使用者需要在自助BI模型中编写DAX公式。不同的人群在本书中都能找到适合自己的内容。某些内容(特别是性能优化部分)更适合BI专家,因为用于优化DAX度量值的知识具备比较高的技术性;但我们认为Excel用户同样需要了解DAX表达式之间的性能差异,以便获得□佳的模型运行效果。
□后,你需要不断从本书中学习,而不能仅仅停留在阅读阶段。我们保持入门部分的内容的通俗易懂,并遵循从零开始学DAX的逻辑路径。然而,当其中涉及的概念开始变得复杂时,我们将不再试图简化它,而是回归真实。DAX不是一门简单的语言,掌握它和理解引擎的每处细节花费了我们多年的时间,不要奢望随手翻翻本书就能明白全部内容。你在阅读本书时要高度集中注意力。作为回报,我们提供了关于DAX各个方面的内容,且这些内容是□□□□的,以助你成为一名真正的DAX专家。
准备知识
我们希望本书读者在Power BI和数据分析方面具备一定的基础知识,如果你对DAX有过一些接触,这对你有好处,它能帮助你更快地阅读本书□□部分内容。当然,了解DAX不是必需的。
本书部分内容引用了MDX和SQL代码,但你不必预先了解这些语言,因为它们只是反映不同表达式之间的区别,即使你不了解这些代码也没有关系。这意味着那些特定主题不是为你准备的。
在本书□复杂的高级内容部分,我们介绍了并行计算、内存访问、CPU使用,以及其他过于高深、让大部分读者可能感到陌生的知识。开发人员熟悉这些内容,而Excel高级用户可能有点畏惧。不过,当涉及优化内容时,这些信息是必需的。因此,本书□复杂的部分面向BI开发人员而不是Power BI和Excel用户。然而,我们相信每个阅读过它的人都会从中受益。
本书编排
本书在内容设计上遵循合理的逻辑顺序,从入门内容逐步深入到复杂内容。每章的内容在撰写时都基于之前内容被完全理解的基础之上;几乎不会重复前面介绍过的概念。正因如此,我们强烈建议读者在首次阅读本书时采用从头至尾的方式系统学习,不要提前跳到复杂章节。
读过一次之后,它就可以成为你学习DAX的参考书。例如,如果你对ALLSELECTED函数的原理不是很明白,则可以直接翻到讲解这个函数的那章打消疑问。不过,在缺少对之前内容理解的情况下,阅读该部分可能无法达到预期效果,甚至会遇到更糟糕的情况:产生片面或错误的理解。
以下是各章节内容概览。
? □□章是对DAX的简要介绍,其中有些内容是专门针对已经有其他编程语言基础的用户,比如SQL、Excel或MDX。本章没有引入任何新概念,只给出你可能已经知道的,一些关于DAX和其他语言差异的提示。
? 第□章介绍DAX语言的概况,涵盖计算列、度量值、错误处理函数等基本概念,并列出DAX的大部分基础函数。
? 第3章专门介绍基础表函数。DAX的许多函数都使用表作为参数或返回表作为结果。本章内容涵盖□基本的表函数。高级表函数将在□□□章和□□3章中介绍。
? 第4章专门介绍计值上下文。计值上下文是整个DAX语言的基石,本章连同第5章,是整本书□重要的内容。
? 第5章只介绍两个函数:CALCULATE和CALCULATETABLE。它们是DAX中□重要的函数,是否理解计值上下文将直接决定你能否用好这两个函数。
? 第6章介绍变量。在本书的案例中使用了大量的变量,本章专门介绍它们的语法并解释如何使用变量。当你在接下来的章节中看到大量使用变量的例子时,本章内容将是非常有参考性的。
? 第7章介绍迭代器和CALCULATE函数:二者是“天作之合”。学习如何使用迭代器,以及上下文转换,可以充分发挥DAX的强大功能。本章中会介绍几个有助于理解如何利用这些工具的例子。
? 第8章深入阐述时间智能计算,包括年初至今、月初至今、去年同期、基于周的时间段和自定义日期表等常用计算。
? 第9章专门介绍DAX中引入的□新特性:计算组(Calculation Groups)。计算组是非常强大的建模工具。本章介绍如何创建和使用计算组,以及计算组的基本概念,并展示了一些示例。
? □□0章介绍筛选上下文的更高级用法,比如数据沿袭、对筛选上下文的检查及编写高级公式的有用工具。
? □□1章介绍如何对层级结构执行计算,以及如何使用DAX处理父/子结构。
? □□□章和□□3章介绍对编写查询和/或执行高级计算都很有用的高级表函数。
? □□4章进一步介绍计值上下文的知识,并在扩展表理论的帮助下介绍诸如ALLSELECTED和KEEPFILTERS之类的复杂函数。本章内容属于高级内容,揭示了复杂DAX表达式的大部分秘密。
? □□5章介绍如何管理DAX中的关系。实际上,借助DAX,任何类型的关系都可以在数据模型中被设置。本章介绍分析型数据模型中常见的多种类型的关系。
? □□6章介绍几个用DAX解决的复杂计算案例。这是关于DAX语言的□后一章,本章有助于读者发现解决方案和产生新的想法。
? □□7章详细描述VertiPaq引擎,它是运行DAX模型时□常用的存储引擎。了解这一点,对于学习如何在DAX公式中获得□佳性能至关重要。
? □□8章基于□□7章的内容,介绍数据模型级别可用的优化手段。读者会在本章学到何时规范化模型,如何减少列基数,如何设置关系和使用□少的内存以在DAX中获得□佳性能。
? □□9章介绍如何读懂查询计划,以及如何借助DAX Studio和SQL Server Profiler等工具来评估DAX查询的性能。
? 第□0章基于之前章节介绍的优化知识,介绍一些技术解决方案,本章首先展示示例公式,然后评估它们的性能,□后解释并给出优化后的公式。
目 录□□章 DAX是什么 1理解数据模型 1理解关系的方向 3给Excel用户的DAX学习建议 5单元格和智能表格 5Excel函数和DAX:两种函数式语言 7使用迭代器 7DAX相关理论 8给SQL开发人员的DAX学习建议 8处理关系 9DAX是函数式语言 9DAX是一种编程语言和查询语言 10DAX和SQL中的子查询与条件语句 10给MDX开发者的DAX学习建议 11多维模型和表格模型 1□DAX是一种编程语言和查询语言 1□层级结构 1□叶级计算 14给Power BI用户的DAX学习建议 14第□章 DAX介绍 15理解DAX计算 15DAX的数据类型 17DAX运算符 □0表构造器 □□条件语句 □□理解计算列和度量值 □3计算列 □3度量值 □4正确选择计算列和度量值 □7变量 □8处理DAX表达式中的错误 □9转换错误 □9算术运算错误 30空值或缺失值 30截获错误 3□生成错误 35规范化DAX代码 36聚合函数和迭代函数介绍 39认识常用的DAX函数 4□聚合函数 4□逻辑函数 43信息函数 45数学函数 45三角函数 46文本函数 46转换函数 48日期和时间函数 48关系函数 49结论 51第3章 使用基础表函数 5□表函数介绍 5□EVALUATE函数语法介绍 54理解FILTER函数 56ALL和ALLEXCEPT函数介绍 58理解VALUES、DISTINCT函数和空行 63将表用作作为标量值 68ALLSELECTED函数介绍 70结论 7□第4章 理解计值上下文 73计值上下文介绍 74理解筛选上下文 74理解行上下文 79测试你对计值上下文的理解 81在计算列中使用SUM函数 81在度量值中使用列 83使用迭代函数创建行上下文 83嵌套多个表的行上下文 84同一个表上的多层嵌套行上下文 85使用EARLIER函数 90理解FILTER、ALL函数和上下文交互 91使用多个表 94行上下文和关系 95筛选上下文和关系 98在筛选上下文中使用DISTINCT和SUMMARIZE函数 10□结论 105第5章 理解CALCULATE和CALCULATETABLE函数 107CALCULATE和CALCULATETABLE函数介绍 107创建筛选上下文 108CALCULATE函数介绍 111使用CALCULATE函数计算百分比 116KEEPFILTERS函数介绍 1□6筛选单列 130筛选复杂条件 131CALCULATE计值顺序 135理解上下文转换 139行上下文和筛选上下文回顾 139上下文转换介绍 14□计算列中的上下文转换 145度量值中的上下文转换 148理解循环依赖 151CALCULATE函数调节器 155理解USERELATIONSHIP函数 155理解CROSSFILTER函数 158理解KEEPFILTERS函数 159理解CALCULATE函数中的ALL函数 160无参数的ALL和ALLSELECTED函数介绍 16□CALCULATE规则总结 163第6章 变量 165VAR语法介绍 165变量是常数 167理解变量的范围 168使用表作为变量 171理解惰性计算 173使用变量的常见模式 174结论 176第7章 迭代函数和CALCULATE函数的使用 177迭代函数的使用 177理解迭代的基数 178在迭代函数中使用上下文转换 180CONCATENATEX函数的使用 184返回表的迭代函数 186使用迭代函数解决常见问题 189计算平均和移动平均 189RANKX函数的使用 19□改变计算的颗粒度 □00结论 □04第8章 时间智能计算 □05时间智能介绍 □05Power BI中的“自动日期/时间” □06Excel Power Pivot中的自动日期列 □07Excel Power Pivot中的日期表模板 □08创建日期表 □08CALENDAR和CALENDARAUTO函数的使用 □09多个日期表的使用 □1□处理连接到与日期表的多个关系 □1□处理多个日期表 □14理解基础时间智能计算 □15标记为日期表 □19基础时间智能函数介绍 □□1计算年初至今、季度初至今和月初至今 □□□计算平移后的周期平移 □□4嵌套混合使用时间智能函数 □□7计算周期之间的差异 □□9计算移动年度总计 □31为嵌套的时间智能函数选择正确的调用顺序 □3□理解半累加计算 □34使用LASTDATE和LASTNONBLANK函数 □36使用期初和期末余额 □41理解高级时间智能计算 □45理解累计至今区间 □46理解DATEADD函数 □49理解FIRSTDATE、LASTDATE、FIRSTNONBLANK和LASTNONBLANK函数 □55利用时间智能函数进行钻取 □58使用自定义日期表 □58基于周的时间智能 □59自定义YTD、QTD和MTD □6□结论 □64第9章 计算组 □65计算组介绍 □65创建计算组 □68理解计算组 □74理解计算项的应用 □77理解计算组优先级 □85在计算项中包含或排除度量值 □89理解横向递归 □9□使用□佳实践 □96结论 □96□□0章 使用筛选上下文 □98使用HASONEVALUE和SELECTEDVALUE函数 □99ISFILTERED和ISCROSSFILTERED函数介绍 303理解VALUES和FILTERS函数的区别 306理解ALLEXCEPT和ALL/VALUES函数的区别 308使用ALL函数避免上下文转换 31□使用ISEMPTY函数 314数据沿袭和TREATAS函数介绍 316使用固化筛选器 3□0结论 3□6□□1章 处理层级结构 3□8计算层级占比 3□8处理父/子层级结构 333结论 344□□□章 使用表函数 345使用CALCULATETABLE函数 345操作表的函数 347使用ADDCOLUMNS函数 348使用SUMMARIZE函数 351使用CROSSJOIN函数 354使用UNION函数 356使用INTERSECT函数 360使用EXCEPT函数 361使用表作为筛选器 363实现或(OR)条件 364将销售额的计算范围缩小至首年客户 367计算新客户 368使用DETAILROWS函数复用表表达式 370创建计算表 37□使用SELECTCOLUMNS函数 37□使用ROW函数创建静态表 373使用DATATABLE函数创建静态表 374使用GENERATESERIES函数 375结论 376□□3章 编写查询 377DAX Studio介绍 377理解EVALUATE函数 378EVALUATE函数语法介绍 378在DEFINE函数中使用VAR 379在DEFINE函数中使用度量值 381实现DAX查询的常用模式 38□使用ROW函数测试度量值 38□使用SUMMARIZE函数 383使用SUMMARIZECOLUMNS函数 385使用TOPN函数 391使用GENERATE和GENERATEALL函数 396使用ISONORAFTER函数 399使用ADDMISSINGITEMS函数 401使用TOPNSKIP函数 40□使用GROUPBY函数 40□使用NATURALINNERJOIN和NATURALLEFTOUTERJOIN函数 405使用SUBSTITUTEWITHINDEX函数 407使用SAMPLE函数 409理解DAX查询中的自动匹配(Auto-Exists)行为 410结论 416□□4章 高级DAX原理 418扩展表介绍 418理解RELATED函数 4□□在计算列中使用RELATED函数 4□4理解表筛选器和列筛选器的区别 4□5在度量值中使用表筛选器 4□8理解活动关系 431表的扩展行为和筛选行为的区别 433扩展表中的上下文转换 435理解ALLSELECTED函数和影子筛选上下文 436影子筛选上下文介绍 437ALLSELECTED函数返回迭代的行 441无参数的ALLSELECTED函数 443ALL系列函数 443ALL函数 445ALLEXCEPT函数 446ALLNOBLANKROW函数 446ALLSELECTED函数 446ALLCROSSFILTERED函数 446理解数据沿袭 446结论 449□□5章 高级关系 451使用计算列创建物理关系 451创建基于多列的关系 451创建基于范围的关系 453使用计算列创建关系中的循环依赖问题 456使用虚拟关系 459在DAX中转移筛选器 460使用TREATAS函数转移筛选器 46□使用INTERSECT函数转移筛选器 463使用FILTER函数转移筛选器 464使用虚拟关系实现动态分组 465理解DAX中的物理关系 468使用双向交叉筛选器 470理解一对多关系 47□理解一对一关系 473理解多对多关系 473通过桥接表实现多对多关系 473通过公共维度表实现多对多关系 479使用MMR弱关系实现多对多关系 483选择正确的关系类型 485管理数据颗粒度 486管理关系中的歧义 490理解活动关系中的歧义 49□解决非活动关系中的歧义 494结论 496□□6章 DAX中的高级计算 497计算两个日期之间的工作日数量 497同时展示预算数据和销售数据 505计算同店销售额 508对事件进行排序 514根据□新销售日期计算上一年的销售额 517结论 5□□□□7章 DAX引擎 5□3了解DAX引擎的架构 5□3公式引擎介绍 5□4存储引擎介绍 5□5VertiPaq(in-memory)存储引擎介绍 5□6DirectQuery存储引擎介绍 5□7理解数据刷新 5□7理解VertiPaq存储引擎 5□8列式数据库介绍 5□8理解VertiPaq压缩 531理解值编码 531理解哈希编码 53□理解行程长度编码(RLE) 533理解再编码 536确定□佳排序顺序 536理解层级和关系 538理解分段和分区 539使用动态管理视图 540理解关系在VertiPaq中的运用 54□物化介绍 545聚合表介绍 547为VertiPaq配置合适的硬件 549是否可以自主选择硬件 550设置硬件优先级 550CPU型号 550内存速度 55□内核数量 55□内存大小 55□硬盘I/O和分页 553硬件选择的□佳实践 553结论 553□□8章 优化VertiPaq引擎 555收集有关数据模型的信息 555反规范化 560列基数 566处理日期和时间列 567计算列 570使用布尔类型的计算列优化复杂筛选器 57□计算列的处理 573存储合适的列 574优化列存储 577列的拆分优化 577优化大基数列 578禁用属性层级结构 578优化钻取属性 579管理VertiPaq聚合表 579结论 58□□□9章 分析DAX查询计划 583捕获DAX查询 583DAX查询计划介绍 586收集查询计划 587逻辑查询计划介绍 587物理查询计划介绍 588存储引擎查询介绍 589获取配置信息 590使用DAX Studio 591使用 SQL Server Profiler 594读懂VertiPaq存储引擎查询 597xmSQL语法介绍 597聚合函数 598算术运算 600筛选运算 600Join运算符 60□批处理事件中的临时表和浅关系 603理解扫描时间 605理解DISTINCTCOUNT函数的内部行为 606理解并行度和数据缓存 607理解VertiPaq缓存 609理解CallbackDataID函数 611读懂DirectQuery模式下的存储引擎查询 616分析复合模型 617在数据模型中使用聚合表 618读懂查询计划 6□0结论 6□6第□0章 DAX优化 6□8定义优化策略 6□9确定要优化的单个DAX表达式 6□9创建查询副本 63□创建DAX查询副本 63□使用DAX Studio创建查询度量值 633创建MDX查询副本 635分析执行时间和查询计划信息 636发现存储引擎或公式引擎中的性能瓶颈 639修改并重新运行测试查询 639优化DAX表达式中的瓶颈 639优化筛选条件 640优化上下文转换 644优化IF条件 650优化度量值中的IF函数 650选择IF函数还是DIVIDE函数 655优化迭代函数中的IF函数 658减少CallbackDataID函数带来的影响 661优化嵌套的迭代函数 665避免在表筛选器中使用DISTINCTCOUNT函数 671使用变量避免重复计算 676结语结论 681
Marco Russo和Alberto Ferrari
SQLBI.COM的创始人。 他们定期发布关于微软Power BI、PowerPivot、DAX和SQL Server的文章。自□009年测试版的Power Pivot发布以来,SQLBI.COM成了DAX相关文章和教程的主要来源之一。他们都为商业智能(Business Intelligence,BI)解决方案提供咨询和指导,并精通与BI相关的微软技术。他们编写了很多关于Power Pivot、DAX和Analysis Services的文章、图书。
高飞
数据分析师,BI总监
□015年接触Power Pivot,被DAX语言的强大和灵活所吸引。
□016年3月创建了面向Power BI用户的微信公众号“Power BI极客”,并更新至今。
□019年上线同名网站PowerBIGeek.com,致力于打造一个综合性的Power BI中文学习网站。
现从事技术分享,企业BI项目实施和培训工作。
微软Power BI□有价值专家(MVP),Power BI可视化大赛评委,ExcelHome论坛版主。