DAX 權威指南:運用 Power BI、SQL Server Analysis Services 和 Excel 實現商業智能分析, 2/e (The Definitive Guide to DAX: Business intelligence with Microsoft Excel, SQL Server Analysis Services, and Power BI, 2/e)

高飛

買這商品的人也買了...

商品描述

本書是微軟DAX語言在商業智能分析、數據建模和數據分析方面的指南。通過對本書的學習,你將瞭解如何使用DAX語言進行商業智能分析、數據建模和數據分析;你將掌握從基礎表函數到高級代碼,以及模型優化的所有內容;你將確切瞭解在運行DAX表達式時,引擎內部所執行的操作,並利用這些知識編寫可以高速運行且健壯的代碼。本書第2版的重點內容包括基於免費的Power BI Desktop來構建和運行示例,幫助你在Power Bl、SQL Server Analysis Services或Excel中充分利用強大的變量(VAR)語法。你想要使用DAX所有的強大功能嗎?那麽這本未進行任何刪減、深入淺出的著作正是你所需要的。本書適合Excel高級用戶、商業智能分析人員、使用DAX和微軟分析工具的專業人士。

作者簡介

Marco Russo和Alberto Ferrari
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