DAX权威指南:运用Power BI、SQL Server Analysis Services和Excel实现商业智能分析(第2版)
定 价:188 元
- 作者:(意)Marco Russo(马尔·科鲁索),Alberto Ferrari(阿尔贝托·费拉里)
- 出版时间:2021/3/1
- ISBN:9787121405051
- 出 版 社:电子工业出版社
- 中图法分类:TP317.3
- 页码:712
- 纸张:
- 版次:01
- 开本:16开
本书是微软DAX语言在商业智能分析、数据建模和数据分析方面的指南。通过对本书的学习,你将了解如何使用DAX语言进行商业智能分析、数据建模和数据分析;你将掌握从基础表函数到高级代码,以及模型优化的所有内容;你将确切了解在运行DAX表达式时,引擎内部所执行的操作,并利用这些知识编写可以高速运行且健壮的代码。本书第2版的重点内容包括基于免费的Power BI Desktop来构建和运行示例,帮助你在Power Bl、SQL Server Analysis Services或Excel中充分利用强大的变量(VAR)语法。你想要使用DAX所有的强大功能吗?那么这本未进行任何删减、深入浅出的著作正是你所需要的。本书适合Excel高级用户、商业智能分析人员、使用DAX和微软分析工具的专业人士。
Marco Russo是SQLBI.COM的创始人。其定期发布关于微软Power BI、PowerPivot、DAX和SQL Server的文章。自2009年测试版的Power Pivot发布以来,SQLBI.COM成了DAX相关文章和教程的主要来源之一。他为商业智能(Business Intelligence,BI)解决方案提供咨询和指导,并精通与BI相关的微软技术。他编写了很多关于Power Pivot、DAX和Analysis Services的文章、图书。
高飞数据分析师,BI总监2015年接触Power Pivot,被DAX语言的强大和灵活所吸引。2016年3月创建了面向Power BI用户的微信公众号“Power BI极客”,并更新至今。2019年上线同名网站PowerBIGeek.com,致力于打造一个综合性的Power BI中文学习网站。现从事技术分享,企业BI项目实施和培训工作。微软Power BI最有价值专家(MVP),Power BI可视化大赛评委,ExcelHome论坛版主。
目 录
第1章 DAX是什么 1
理解数据模型 1
理解关系的方向 3
给Excel用户的DAX学习建议 5
单元格和智能表格 5
Excel函数和DAX:两种函数式语言 7
使用迭代器 7
DAX相关理论 8
给SQL开发人员的DAX学习建议 8
处理关系 9
DAX是函数式语言 9
DAX是一种编程语言和查询语言 10
DAX和SQL中的子查询与条件语句 10
给MDX开发者的DAX学习建议 11
多维模型和表格模型 12
DAX是一种编程语言和查询语言 12
层级结构 12
叶级计算 14
给Power BI用户的DAX学习建议 14
第2章 DAX介绍 15
理解DAX计算 15
DAX的数据类型 17
DAX运算符 20
表构造器 22
条件语句 22
理解计算列和度量值 23
计算列 23
度量值 24
正确选择计算列和度量值 27
变量 28
处理DAX表达式中的错误 29
转换错误 29
算术运算错误 30
空值或缺失值 30
截获错误 32
生成错误 35
规范化DAX代码 36
聚合函数和迭代函数介绍 39
认识常用的DAX函数 42
聚合函数 42
逻辑函数 43
信息函数 45
数学函数 45
三角函数 46
文本函数 46
转换函数 48
日期和时间函数 48
关系函数 49
结论 51
第3章 使用基础表函数 52
表函数介绍 52
EVALUATE函数语法介绍 54
理解FILTER函数 56
ALL和ALLEXCEPT函数介绍 58
理解VALUES、DISTINCT函数和空行 63
将表用作作为标量值 68
ALLSELECTED函数介绍 70
结论 72
第4章 理解计值上下文 73
计值上下文介绍 74
理解筛选上下文 74
理解行上下文 79
测试你对计值上下文的理解 81
在计算列中使用SUM函数 81
在度量值中使用列 83
使用迭代函数创建行上下文 83
嵌套多个表的行上下文 84
同一个表上的多层嵌套行上下文 85
使用EARLIER函数 90
理解FILTER、ALL函数和上下文交互 91
使用多个表 94
行上下文和关系 95
筛选上下文和关系 98
在筛选上下文中使用DISTINCT和SUMMARIZE函数 102
结论 105
第5章 理解CALCULATE和CALCULATETABLE函数 107
CALCULATE和CALCULATETABLE函数介绍 107
创建筛选上下文 108
CALCULATE函数介绍 111
使用CALCULATE函数计算百分比 116
KEEPFILTERS函数介绍 126
筛选单列 130
筛选复杂条件 131
CALCULATE计值顺序 135
理解上下文转换 139
行上下文和筛选上下文回顾 139
上下文转换介绍 142
计算列中的上下文转换 145
度量值中的上下文转换 148
理解循环依赖 151
CALCULATE函数调节器 155
理解USERELATIONSHIP函数 155
理解CROSSFILTER函数 158
理解KEEPFILTERS函数 159
理解CALCULATE函数中的ALL函数 160
无参数的ALL和ALLSELECTED函数介绍 162
CALCULATE规则总结 163
第6章 变量 165
VAR语法介绍 165
变量是常数 167
理解变量的范围 168
使用表作为变量 171
理解惰性计算 173
使用变量的常见模式 174
结论 176
第7章 迭代函数和CALCULATE函数的使用 177
迭代函数的使用 177
理解迭代的基数 178
在迭代函数中使用上下文转换 180
CONCATENATEX函数的使用 184
返回表的迭代函数 186
使用迭代函数解决常见问题 189
计算平均和移动平均 189
RANKX函数的使用 192
改变计算的颗粒度 200
结论 204
第8章 时间智能计算 205
时间智能介绍 205
Power BI中的“自动日期/时间” 206
Excel Power Pivot中的自动日期列 207
Excel Power Pivot中的日期表模板 208
创建日期表 208
CALENDAR和CALENDARAUTO函数的使用 209
多个日期表的使用 212
处理连接到与日期表的多个关系 212
处理多个日期表 214
理解基础时间智能计算 215
标记为日期表 219
基础时间智能函数介绍 221
计算年初至今、季度初至今和月初至今 222
计算平移后的周期平移 224
嵌套混合使用时间智能函数 227
计算周期之间的差异 229
计算移动年度总计 231
为嵌套的时间智能函数选择正确的调用顺序 232
理解半累加计算 234
使用LASTDATE和LASTNONBLANK函数 236
使用期初和期末余额 241
理解高级时间智能计算 245
理解累计至今区间 246
理解DATEADD函数 249
理解FIRSTDATE、LASTDATE、FIRSTNONBLANK和
LASTNONBLANK函数 255
利用时间智能函数进行钻取 258
使用自定义日期表 258
基于周的时间智能 259
自定义YTD、QTD和MTD 262
结论 264
第9章 计算组 265
计算组介绍 265
创建计算组 268
理解计算组 274
理解计算项的应用 277
理解计算组优先级 285
在计算项中包含或排除度量值 289
理解横向递归 292
使用最佳实践 296
结论 296
第10章 使用筛选上下文 298
使用HASONEVALUE和SELECTEDVALUE函数 299
ISFILTERED和ISCROSSFILTERED函数介绍 303
理解VALUES和FILTERS函数的区别 306
理解ALLEXCEPT和ALL/VALUES函数的区别 308
使用ALL函数避免上下文转换 312
使用ISEMPTY函数 314
数据沿袭和TREATAS函数介绍 316
使用固化筛选器 320
结论 326
第11章 处理层级结构 328
计算层级占比 328
处理父/子层级结构 333
结论 344
第12章 使用表函数 345
使用CALCULATETABLE函数 345
操作表的函数 347
使用ADDCOLUMNS函数 348
使用SUMMARIZE函数 351
使用CROSSJOIN函数 354
使用UNION函数 356
使用INTERSECT函数 360
使用EXCEPT函数 361
使用表作为筛选器 363
实现或(OR)条件 364
将销售额的计算范围缩小至首年客户 367
计算新客户 368
使用DETAILROWS函数复用表表达式 370
创建计算表 372
使用SELECTCOLUMNS函数 372
使用ROW函数创建静态表 373
使用DATATABLE函数创建静态表 374
使用GENERATESERIES函数 375
结论 376
第13章 编写查询 377
DAX Studio介绍 377
理解EVALUATE函数 378
EVALUATE函数语法介绍 378
在DEFINE函数中使用VAR 379
在DEFINE函数中使用度量值 381
实现DAX查询的常用模式 382
使用ROW函数测试度量值 382
使用SUMMARIZE函数 383
使用SUMMARIZECOLUMNS函数 385
使用TOPN函数 391
使用GENERATE和GENERATEALL函数 396
使用ISONORAFTER函数 399
使用ADDMISSINGITEMS函数 401
使用TOPNSKIP函数 402
使用GROUPBY函数 402
使用NATURALINNERJOIN和NATURALLEFTOUTERJOIN函数 405
使用SUBSTITUTEWITHINDEX函数 407
使用SAMPLE函数 409
理解DAX查询中的自动匹配(Auto-Exists)行为 410
结论 416
第14章 高级DAX原理 418
扩展表介绍 418
理解RELATED函数 422
在计算列中使用RELATED函数 424
理解表筛选器和列筛选器的区别 425
在度量值中使用表筛选器 428
理解活动关系 431
表的扩展行为和筛选行为的区别 433
扩展表中的上下文转换 435
理解ALLSELECTED函数和影子筛选上下文 436
影子筛选上下文介绍 437
ALLSELECTED函数返回迭代的行 441
无参数的ALLSELECTED函数 443
ALL系列函数 443
ALL函数 445
ALLEXCEPT函数 446
ALLNOBLANKROW函数 446
ALLSELECTED函数 446
ALLCROSSFILTERED函数 446
理解数据沿袭 446
结论 449
第15章 高级关系 451
使用计算列创建物理关系 451
创建基于多列的关系 451
创建基于范围的关系 453
使用计算列创建关系中的循环依赖问题 456
使用虚拟关系 459
在DAX中转移筛选器 460
使用TREATAS函数转移筛选器 462
使用INTERSECT函数转移筛选器 463
使用FILTER函数转移筛选器 464
使用虚拟关系实现动态分组 465
理解DAX中的物理关系 468
使用双向交叉筛选器 470
理解一对多关系 472
理解一对一关系 473
理解多对多关系 473
通过桥接表实现多对多关系 473
通过公共维度表实现多对多关系 479
使用MMR弱关系实现多对多关系 483
选择正确的关系类型 485
管理数据颗粒度 486
管理关系中的歧义 490
理解活动关系中的歧义 492
解决非活动关系中的歧义 494
结论 496
第16章 DAX中的高级计算 497
计算两个日期之间的工作日数量 497
同时展示预算数据和销售数据 505
计算同店销售额 508
对事件进行排序 514
根据最新销售日期计算上一年的销售额 517
结论 522
第17章 DAX引擎 523
了解DAX引擎的架构 523
公式引擎介绍 524
存储引擎介绍 525
VertiPaq(in-memory)存储引擎介绍 526
DirectQuery存储引擎介绍 527
理解数据刷新 527
理解VertiPaq存储引擎 528
列式数据库介绍 528
理解VertiPaq压缩 531
理解值编码 531
理解哈希编码 532
理解行程长度编码(RLE) 533
理解再编码 536
确定最佳排序顺序 536
理解层级和关系 538
理解分段和分区 539
使用动态管理视图 540
理解关系在VertiPaq中的运用 542
物化介绍 545
聚合表介绍 547
为VertiPaq配置合适的硬件 549
是否可以自主选择硬件 550
设置硬件优先级 550
CPU型号 550
内存速度 552
内核数量 552
内存大小 552
硬盘I/O和分页 553
硬件选择的最佳实践 553
结论 553
第18章 优化VertiPaq引擎 555
收集有关数据模型的信息 555
反规范化 560
列基数 566
处理日期和时间列 567
计算列 570
使用布尔类型的计算列优化复杂筛选器 572
计算列的处理 573
存储合适的列 574
优化列存储 577
列的拆分优化 577
优化大基数列 578
禁用属性层级结构 578
优化钻取属性 579
管理VertiPaq聚合表 579
结论 582
第19章 分析DAX查询计划 583
捕获DAX查询 583
DAX查询计划介绍 586
收集查询计划 587
逻辑查询计划介绍 587
物理查询计划介绍 588
存储引擎查询介绍 589
获取配置信息 590
使用DAX Studio 591
使用 SQL Server Profiler 594
读懂VertiPaq存储引擎查询 597
xmSQL语法介绍 597
聚合函数 598
算术运算 600
筛选运算 600
Join运算符 602
批处理事件中的临时表和浅关系 603
理解扫描时间 605
理解DISTINCTCOUNT函数的内部行为 606
理解并行度和数据缓存 607
理解VertiPaq缓存 609
理解CallbackDataID函数 611
读懂DirectQuery模式下的存储引擎查询 616
分析复合模型 617
在数据模型中使用聚合表 618
读懂查询计划 620
结论 626
第20章 DAX优化 628
定义优化策略 629
确定要优化的单个DAX表达式 629
创建查询副本 632
创建DAX查询副本 632
使用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