據(jù)練手:從導(dǎo)入建模到DAX實戰(zhàn))
1. 先說清楚為什么練手要用官方示例數(shù)據(jù)如果你剛開始接觸Power BI大概率會遇到一個比DAX 怎么寫更讓人頭疼的問題——拿什么數(shù)據(jù)練手。隨便找個 Excel 表格打開列名是字段1、字段2、字段3日期是文本格式金額里混著元萬-和各種空格你花兩個小時洗數(shù)據(jù)最后連一張像樣的折線圖都沒做出來學(xué)習(xí)熱情直接掉一半。我自己最開始就是這樣折騰了三個晚上最后把文件刪了。官方示例數(shù)據(jù)的價值就在這兒。它們是微軟為了演示產(chǎn)品能力而專門整理過的數(shù)據(jù)集字段命名規(guī)范、日期是真日期、維度表與事實表的關(guān)系基本符合星型模型還自帶一份已經(jīng)做好的 .pbix 報表文件。你可以直接打開看別人是怎么擺視覺對象、怎么寫度量值、怎么設(shè)置交互的也能把數(shù)據(jù)抽出來自己從零重建一遍。對新手來說這是從看不懂到能上手之間最短的一條路對已經(jīng)會用的人來說這些示例是驗證新寫法、測試性能優(yōu)化的標(biāo)準(zhǔn)靶子。下面這 11 個案例是我自己反復(fù)用過、也推薦給同事的一套組合。我會把每個案例練什么、難點在哪、容易在哪兒卡住講清楚同時把獲取方式、導(dǎo)入流程、建模要點和常見報錯的排查思路一并寫出來。不管你是完全沒碰過 Power BI 的零基礎(chǔ)還是已經(jīng)做過幾個報表但模型總覺得別扭的人都能從里面挑到適合自己的那一個。2. 11個必學(xué)官方示例數(shù)據(jù)逐個體檢2.1 零售與銷售類最容易出成果的入口零售分析示例Retail Analysis Sample是我給所有人推薦的第一個練手項目。它的數(shù)據(jù)形態(tài)非常典型一張按門店、按日期、按產(chǎn)品記錄銷售額的事實表配上產(chǎn)品、門店、日期等維度。你打開那個現(xiàn)成的 .pbix會看到儀表板上按區(qū)域分布的門店地圖、按品類拆分的銷售柱狀圖、以及一條貫穿全年的時間趨勢線。這個案例最適合練的是維度層級鉆取——從區(qū)域鉆到城市再到具體門店最后看到單品。我第一次做的時候鉆取總是斷鏈后來才發(fā)現(xiàn)是維度表里存在空值導(dǎo)致層級匹配不上。銷售與市場示例Sales and Marketing Sample偏向另一個角度。它把銷售數(shù)據(jù)按產(chǎn)品、按銷售渠道、按時間段切開重點展示的是同一份數(shù)據(jù)在不同粒度下的表現(xiàn)差異。這個案例我推薦用來練計算列與度量值的區(qū)別。舉個實際場景你需要在產(chǎn)品表里加一列利潤率區(qū)間把利潤率分成高中低三檔這是行級別的判斷用計算列而你需要在報表上顯示當(dāng)前篩選范圍內(nèi)的平均利潤率隨切片器變化而變化這就是度量值。很多人一開始分不清把該用度量值的東西寫成計算列結(jié)果切片器一拉數(shù)字紋絲不動人當(dāng)場懵住。財務(wù)示例Financial Sample結(jié)構(gòu)最簡單通常是一張寬表包含國家、產(chǎn)品、細(xì)分市場、銷售金額、利潤、折扣等字段。它簡單到有人覺得沒什么可練的但我恰恰用它來練矩陣視覺對象和條件格式。把國家放行、產(chǎn)品放列、利潤放值再給利潤加數(shù)據(jù)條和色階一眼就能看出哪個市場在虧錢。這個案例還有個隱藏價值因為字段少、數(shù)據(jù)量小它是測試 DAX 寫法性能差異的最佳試驗田同一個結(jié)果用 SUMX 和用 SUM 寫在小數(shù)據(jù)上看不出區(qū)別但它能讓你先養(yǎng)成能不用迭代函數(shù)就不用的習(xí)慣。2.2 客戶、機會與利潤類練度量值的試金石客戶盈利能力示例Customer Profitability Sample是一個把收入高和真的賺錢這兩件事拆開的經(jīng)典案例。它會給你客戶的收入、成本、服務(wù)費用、折扣等數(shù)據(jù)讓你算出每個客戶的實際貢獻。這里最值得練的是占比類度量值——單個客戶收入占總收入的比例、前 20% 客戶貢獻了多少利潤。寫占比的時候新手最常犯的錯是直接用DIVIDE(SUM(收入), SUM(全部收入))但分母沒有解除篩選結(jié)果每一行算出來都是 100%。正確做法是用CALCULATE配合ALL或者REMOVEFILTERS把篩選上下文剝掉這個思維轉(zhuǎn)折點一旦跨過去DAX 就算入門了。機會分析示例Opportunity Analysis Sample偏向銷售管道管理數(shù)據(jù)里通常有商機階段、預(yù)計成交金額、成交概率、負(fù)責(zé)人等字段。它的實用之處在于加權(quán)預(yù)測用預(yù)計金額乘以成交概率算出每個階段的加權(quán)金額再按時間軸累加。這個案例我建議多練SWITCH和IF的嵌套寫法以及在視覺對象上做漏斗圖 階段篩選的組合。需要注意的是官方數(shù)據(jù)里的概率字段有時是整數(shù)百分比、有時是小數(shù)導(dǎo)入后先看一眼數(shù)據(jù)類型否則算出來的數(shù)字會差一百倍這種錯誤找起來非常折磨人。供應(yīng)鏈與采購分析示例Procurement Analysis Sample關(guān)注的是支出結(jié)構(gòu)通常是按供應(yīng)商、按物料類別、按采購部門統(tǒng)計金額。這個案例適合練排名與 Top N 篩選。比如找出采購金額最高的前 10 家供應(yīng)商并算出它們占了總采購額的多少。寫 Top N 時要注意視覺對象自帶的 Top N 篩選器和用 DAX 寫的 RANKX 是兩回事前者只影響顯示后者才能參與計算想算前 10 名合計占比就必須用后者。2.3 內(nèi)部運營類IT支出、供應(yīng)商質(zhì)量與人力IT 支出分析示例IT Spend Analysis Sample的數(shù)據(jù)結(jié)構(gòu)很有意思它把預(yù)算、實際支出、計劃值放在一起對比。這個案例的核心練點是差異分析Variance Analysis實際減預(yù)算、差異百分比、差異的同比變化。我印象很深的是這個案例的官方報表里用了大量的 KPI 視覺對象和卡片圖用紅綠箭頭顯示是否超出預(yù)算。你可以試著把它的差異計算邏輯自己重寫一遍再對比官方的寫法經(jīng)常能發(fā)現(xiàn)更簡潔的路徑。另外提醒一句預(yù)算類數(shù)據(jù)里經(jīng)常出現(xiàn)同一科目在不同月份有不同預(yù)算版本的情況一定要先確認(rèn)清楚哪個版本是最終生效的否則做出來的差異全是假象。供應(yīng)商質(zhì)量分析示例Supplier Quality Analysis Sample是個偏制造業(yè)的場景數(shù)據(jù)里有缺陷數(shù)量、缺陷類型、批次、供應(yīng)商、檢出日期等。它的價值在于比率類指標(biāo)和帕累托分析。缺陷率這種指標(biāo)分子是缺陷數(shù)、分母是總產(chǎn)量兩邊來自不同的粒度必須確保在同一個篩選上下文里計算。帕累托圖則要靠 RANKX 加累計求和來實現(xiàn)我第一次寫累計求和時用錯了篩選方向?qū)е吕奂又祻拇蟮叫〉怪吲挪榱税胩觳虐l(fā)現(xiàn)是FILTER里的比較符寫反了。人力資源示例Human Resources Sample包含員工人數(shù)、離職、部門、職位、入職日期等字段。這個案例是練時間智能和人員流動分析的好材料期初人數(shù)、期末人數(shù)、期間入職、期間離職、離職率。寫這類指標(biāo)幾乎繞不開DATEADD、SAMEPERIODLASTYEAR和DATESYTD。有個坑必須提前說時間智能函數(shù)的前提是有一張連續(xù)的、沒有斷檔的日期表而且和事實表建立了正確的一對多關(guān)系。如果日期表里有重復(fù)日期或者缺了某幾天TOTALYTD會算得莫名其妙而且不報錯只是數(shù)字不對非常隱蔽。教育機構(gòu)示例Education / Teachers Sample一般是學(xué)生成績、出勤、班級、科目這類數(shù)據(jù)適合練條件分組與分檔統(tǒng)計。比如把成績分成優(yōu)秀、良好、及格、不及格四檔統(tǒng)計各檔人數(shù)和占比。分檔這件事看著簡單但邊界值處理最容易出問題——60 分到底算及格還是不及格用SWITCH(TRUE())寫的時候順序?qū)懛唇Y(jié)果就全錯了。我習(xí)慣在寫完之后單獨拉一張明細(xì)表按分檔排序肉眼掃一遍邊界值那幾行。2.4 公共事務(wù)類與綜合復(fù)盤案例醫(yī)療健康類示例Healthcare Sample通常圍繞就診量、科室、醫(yī)生、費用、住院天數(shù)展開。這個案例最值得練的是平均值類指標(biāo)的口徑問題平均住院天數(shù)不能用總住院天數(shù)除以總就診人次因為不同科室的權(quán)重不一樣正確做法是加權(quán)平均或者在合適的粒度上求平均。這類看起來會算、其實算錯的指標(biāo)在真實業(yè)務(wù)里非常常見拿這個案例練一遍以后遇到類似場景會敏感很多。最后一個我把它當(dāng)作綜合復(fù)盤案例來用——不指定具體哪一個而是挑一個你已經(jīng)練過的示例把數(shù)據(jù)全部刪掉重來。具體做法是把 .pbix 里所有的報表頁刪光只留下數(shù)據(jù)模型然后不看官方報表自己從零設(shè)計三個業(yè)務(wù)問題比如哪個區(qū)域的增長最快哪類產(chǎn)品的退貨率異常哪些客戶的復(fù)購周期在變長再自己建模、寫度量值、做頁面、加交互。做完之后再打開官方那份對照看差異在哪。這一步是分水嶺前面十個案例都是在學(xué)這一步是在用。我自己做完這一輪之后才算真正理解了度量值不是公式是對業(yè)務(wù)問題的定義這句話。3. 下載與導(dǎo)入從拿到文件到看見圖表3.1 獲取途徑與文件格式說明這些示例數(shù)據(jù)的官方獲取方式有兩個渠道。第一個是直接在Power BI Desktop里走獲取數(shù)據(jù)通道部分版本內(nèi)置了示例數(shù)據(jù)集入口能一鍵生成對應(yīng)的數(shù)據(jù)模型和報表頁第二個是到微軟官方的學(xué)習(xí)文檔站點在示例數(shù)據(jù)集相關(guān)的文檔頁面里會提供打包文件的下載一般是.pbix格式也有一些配套的 Excel 或 CSV 源文件。我一般建議走文檔站點這條路因為能看到該示例的字段說明和推薦分析場景練的時候更有方向感。關(guān)于文件格式需要區(qū)分清楚.pbix 是二進制打包文件里面同時包含數(shù)據(jù)模型和報表頁面打開即用.xlsx 和 .csv 只是原始數(shù)據(jù)需要你自己導(dǎo)入和建模。兩種用法各有價值——用 .pbix 快速看官方怎么做用原始文件從零搭一遍才算真正學(xué)會。我的習(xí)慣是先用 .pbix 看一遍然后關(guān)掉用原始數(shù)據(jù)自己重建卡住了再打開對照。3.2 Power BI Desktop 導(dǎo)入的完整步驟拿到原始 Excel 或 CSV 之后導(dǎo)入流程大致如下。第一步打開 Power BI Desktop點主頁里的獲取數(shù)據(jù)選擇對應(yīng)的文件類型Excel 工作簿或者文本/CSV。第二步在彈出的導(dǎo)航器里勾選需要的表注意這里有一個轉(zhuǎn)換數(shù)據(jù)和加載的分叉——只要數(shù)據(jù)里有任何臟值一律先點轉(zhuǎn)換數(shù)據(jù)進 Power Query別直接加載因為加載之后再去改就要多繞一圈。進 Power Query 之后重點看三件事列的數(shù)據(jù)類型對不對日期是不是 Date、金額是不是 Decimal Number、編號是不是 Text、有沒有需要剔除的表頭行或多層表頭、有沒有合并單元格導(dǎo)致的空值。這里給一個實操細(xì)節(jié)日期列導(dǎo)入后經(jīng)常顯示為DateTime而不是Date如果你后面要用時間智能函數(shù)建議在這一步就把它改成Date類型否則日期表和事實表的粒度對不上關(guān)系會建不干凈。第三步是檢查列名。示例數(shù)據(jù)的列名偶爾會帶空格、中文字符或者特殊符號雖然 Power BI 支持這些列名但寫 DAX 的時候引用起來要加單引號很別扭。我一般的做法是導(dǎo)入后統(tǒng)一改成英文加下劃線的命名或者至少去掉前后空格。第四步點關(guān)閉并應(yīng)用回到報表視圖進入建模環(huán)節(jié)。提示如果導(dǎo)入后發(fā)現(xiàn)有幾千行是匯總行或者合計行混在明細(xì)里一定要在 Power Query 階段過濾掉否則算總和會翻倍。這類匯總行在示例數(shù)據(jù)里出現(xiàn)的概率不高但從業(yè)務(wù)系統(tǒng)導(dǎo)出的真實數(shù)據(jù)里非常常見養(yǎng)成這個檢查習(xí)慣有好處。3.3 連接 MySQL 等外部數(shù)據(jù)源的關(guān)鍵配置很多人練完示例數(shù)據(jù)第一步想做的就是連自己的數(shù)據(jù)庫Power BI MySQL是很常見的組合。這里有幾個必須踩過才知道的點。首先Power BI Desktop 連接 MySQL 并不是開箱即用的它依賴MySQL Connector/NET這個驅(qū)動組件。你需要先安裝它然后再打開 Power BI在獲取數(shù)據(jù)里才能看到 MySQL 數(shù)據(jù)庫這個選項。如果沒裝驅(qū)動就去點得到的通常是找不到提供程序之類的錯誤提示。其次位數(shù)要匹配?,F(xiàn)在主流的 Power BI Desktop 是 64 位版本所以必須裝 64 位的 Connector/NET裝了 32 位的桌面版根本識別不到。這個問題我見過太多次同事說我明明裝了驅(qū)動結(jié)果一問裝的是 32 位卸了重裝立刻就好。安裝完之后建議重啟一次 Power BI Desktop讓它重新加載驅(qū)動列表。第三個坑是連接方式的選擇。填寫服務(wù)器和數(shù)據(jù)庫名之后通常會讓你選導(dǎo)入還是DirectQuery。練手階段一律選導(dǎo)入因為 DirectQuery 會把每一條 DAX 查詢翻譯成 SQL 發(fā)給數(shù)據(jù)庫寫法稍有問題就會拖慢整個報表而且很多 DAX 函數(shù)在 DirectQuery 模式下不支持。等你對模型和查詢性能有判斷力了再考慮 DirectQuery 場景。第四個坑是權(quán)限和字符集。如果連上之后發(fā)現(xiàn)中文表名或字段名是亂碼大概率是數(shù)據(jù)庫端的字符集設(shè)置問題跟 Power BI 無關(guān)需要從數(shù)據(jù)庫連接參數(shù)那一側(cè)解決。另外如果你的查詢里帶了時間范圍篩選注意檢查數(shù)據(jù)庫時區(qū)和本地時區(qū)的差異否則會出現(xiàn)明明有今天的數(shù)據(jù)報表卻顯示不出來這種詭異現(xiàn)象。4. 建模環(huán)節(jié)把示例數(shù)據(jù)變成自己的模型4.1 關(guān)系視圖里必須做對的三件事模型是 Power BI 的地基地基歪了再漂亮的視覺對象也是空中樓閣。從示例數(shù)據(jù)開始就有三件事必須做對。第一件是事實表和維度表的分工。事實表裝的是發(fā)生了什么——一筆訂單、一次就診、一條缺陷記錄特點是行數(shù)多、字段少、以數(shù)值和鍵為主。維度表裝的是用來看的維度——產(chǎn)品、客戶、日期、門店特點是行數(shù)少、字段多、以文本和分類為主。示例數(shù)據(jù)基本都遵循這個結(jié)構(gòu)你可以打開關(guān)系視圖數(shù)一數(shù)看看官方是怎么劃分的。如果發(fā)現(xiàn)某張表里既有大量數(shù)值又有大量描述性文本那它大概率是一張寬表作為練習(xí)可以接受但真實項目里要想辦法拆開。第二件是關(guān)系的方向和基數(shù)。絕大多數(shù)情況下是從維度表的一側(cè)連到事實表的多側(cè)方向是單向過濾。雙向過濾要慎用它會帶來篩選上下文的混亂和潛在的性能問題還會在模型里產(chǎn)生不確定的歧義路徑。我自己的經(jīng)驗是除非確實需要做多對多或者橋接否則堅持單向。第三件是日期表必須是獨立的、連續(xù)的、標(biāo)記為日期表的。很多人直接用事實表里的日期列做時間智能短期看沒問題一旦要用到?jīng)]有數(shù)據(jù)的月份比如某個月沒有銷售記錄指標(biāo)就會斷檔。正確做法是用CALENDAR或CALENDARAUTO建一張覆蓋全部年份的日期表在建模選項卡里把它標(biāo)記為日期表然后用它去和所有事實表的日期字段建立關(guān)系。4.2 度量值、計算列、計算表怎么分工這三樣?xùn)|西經(jīng)常被混著用但它們的分工很清楚。計算列是在數(shù)據(jù)加載時按行算出來的結(jié)果會存進模型占用內(nèi)存。適合做行級別的、固定不變的屬性比如根據(jù)金額區(qū)間給訂單打標(biāo)簽、把兩個文本字段拼起來做一個唯一鍵。判斷標(biāo)準(zhǔn)很簡單這個結(jié)果會不會隨報表上的切片器變化不會就用計算列。度量值是在查詢時根據(jù)當(dāng)前的篩選上下文動態(tài)算出來的不占內(nèi)存只占一點點元數(shù)據(jù)。適合做所有的聚合、占比、同比、排名。判斷標(biāo)準(zhǔn)是這個數(shù)字要不要跟著篩選變化要就用度量值。絕大多數(shù)業(yè)務(wù)指標(biāo)都應(yīng)該是度量值。計算表是用 DAX 生成的一整張表通常用來做參數(shù)表、日期表、或者一些輔助的映射表。示例數(shù)據(jù)里最常見的場景是哪些度量值/維度可以被用戶切換這時候需要一張計算表。它的使用頻率遠(yuǎn)低于前兩者但某些交互場景里沒有它做不了。舉個具體的對照假設(shè)你在算零售數(shù)據(jù)里的高價值訂單占比。先建一個計算列如果單筆金額超過 500 就標(biāo)為高價值這是行級別的判斷再建一個度量值用高價值訂單數(shù)除以總訂單數(shù)這個會隨著你選的區(qū)域、時間變化。兩件事分得清模型就干凈。4.3 每個示例都值得寫的三組 DAX不管練哪個案例有三組 DAX 都值得反復(fù)寫寫到形成肌肉記憶。第一組是基礎(chǔ)聚合加時間維度本期金額、去年同期、同比增長率、年初至今累計。寫法上本期是SUM去年同期用CALCULATE(SUM(...), SAMEPERIODLASTYEAR(日期表[日期]))累計用TOTALYTD。這里要記住用時間智能函數(shù)時第一個參數(shù)表名寫日期表而不是事實表很多人在這里寫錯結(jié)果報錯說找不到日期列。第二組是占比和排名某分類占總體比例、Top N 排名、前 N 名合計占比。占比的核心是解除篩選用CALCULATE配合ALL排名用RANKX注意它默認(rèn)是從小到大排算最大的排第一要把排序參數(shù)設(shè)成降序。前 N 名合計則要先用RANKX在FILTER里篩選出前 N 名再求和這一段是 DAX 里最容易寫錯的模板之一。第三組是條件與安全除法用DIVIDE代替斜杠做除法避免除以零的報錯用SWITCH(TRUE())寫多條件分檔。這兩個寫法是日常寫度量值里出現(xiàn)頻率最高的早點養(yǎng)成用DIVIDE的習(xí)慣能省掉大量錯誤字樣出現(xiàn)在視覺對象上的尷尬。5. 可視化與交互示例文件教了什么5.1 從官方報表里偷師的版式邏輯打開官方的 .pbix 文件別只盯著圖表類型重點看它的頁面布局。我觀察到幾個反復(fù)出現(xiàn)的規(guī)律。第一左上角永遠(yuǎn)是核心指標(biāo)卡片一到三個數(shù)字字體大、顏色醒目讓人三秒鐘抓住重點第二中間主體區(qū)域是趨勢和對比折線圖配柱狀圖回答在變好還是變壞第三右側(cè)或底部是明細(xì)和維度拆分回答為什么變好變壞。這個結(jié)論—趨勢—歸因的三段式布局幾乎能套用到所有業(yè)務(wù)報表上。還有一個細(xì)節(jié)值得學(xué)官方的示例報表配色都非常克制一般不超過五種顏色而且用同一色系的不同深淺表示量級用對比色只標(biāo)注異常項。我見過太多新手作品一張頁面上七八種顏色亂飛每種顏色都在搶注意力結(jié)果什么都記不住。練示例數(shù)據(jù)的時候就照著官方的配色抄一遍抄完再問自己如果只能留三種顏色留哪三種這個練習(xí)很有用。5.2 切片器、鉆取與書簽的組合視覺對象做得再好看如果不能交互就只是一張圖。示例報表里有一套很標(biāo)準(zhǔn)的交互組合值得練。切片器負(fù)責(zé)篩選常見的是日期、區(qū)域、品類。這里有個實操經(jīng)驗切片器的方向要統(tǒng)一要么都橫向排一行放頂部要么都豎排放左側(cè)別橫豎混著來。另外如果頁面上有多個視覺對象共享同一個篩選邏輯可以用同步切片器功能避免用戶在每一頁重復(fù)操作。鉆取負(fù)責(zé)從宏觀到微觀。做法是在維度表的字段上配好層級然后在視覺對象上啟用鉆取。踩過的坑是鉆取之后一定要留一個返回按鈕官方示例里通常用書簽配合形狀做返回。我自己遇到過鉆進去出不來、只能在頁面間來回切的情況體驗很差。書簽負(fù)責(zé)切換視圖狀態(tài)。最常見的用法是做圖表的切換顯示——同一塊區(qū)域按鈕點一下從柱狀圖變成折線圖或者從金額切換成數(shù)量。做書簽時記得把數(shù)據(jù)和顯示兩個選項想清楚只勾選需要變化的部分否則會出現(xiàn)切換后篩選器被重置的情況。這一塊建議拿零售示例的官方報表拆開看它的書簽設(shè)計相當(dāng)?shù)湫汀?. 常見報錯與排查速查6.1 導(dǎo)入與刷新類問題速查表現(xiàn)象可能原因處理思路提示找不到提供程序未安裝對應(yīng)驅(qū)動安裝匹配位數(shù)的連接器組件后重啟中文顯示亂碼字符集或編碼不匹配檢查源文件編碼導(dǎo)入時選擇正確編碼刷新后部分?jǐn)?shù)字變大匯總行混入明細(xì)在查詢階段過濾掉合計行關(guān)系無法創(chuàng)建兩邊數(shù)據(jù)類型不一致統(tǒng)一為相同類型注意日期與日期時間日期層級顯示異常未標(biāo)記日期表在建模選項卡標(biāo)記為日期表報表打開提示缺少數(shù)據(jù)源源文件路徑變化在數(shù)據(jù)源設(shè)置里重新定位文件這張表是我自己攢下來的遇到問題時從上往下對一遍絕大多數(shù)能定位到原因。特別說一下刷新后數(shù)字變大這一條它的隱蔽性在于第一次導(dǎo)入時你可能已經(jīng)過濾了匯總行但如果源文件每個月更新時格式變了比如匯總行位置換了過濾條件就可能失效所以每次源數(shù)據(jù)更新后建議掃一眼總行數(shù)是否合理。6.2 日期與時間智能的坑日期相關(guān)的問題占了新手報錯的一大半這里單獨拎出來說。第一個坑是日期表不連續(xù)。只要日期表里少了一天TOTALYTD、DATESINPERIOD這類函數(shù)就可能算錯而且不報錯。檢查方法很簡單給日期表加一個COUNTROWS的度量值看它和日期區(qū)間的實際天數(shù)是否一致。第二個坑是事實表里的日期有多個。比如訂單表里既有下單日期、又有發(fā)貨日期、還有收款日期這三個日期都和日期表有關(guān)系的話會有兩條關(guān)系是虛線非活動關(guān)系。這時候要用USERELATIONSHIP在度量值里顯式激活否則默認(rèn)用的是那條實線關(guān)系算出來的結(jié)果就跑到別的維度上去了。第三個坑是時區(qū)。如果數(shù)據(jù)源記錄的日期時間是 UTC 而你的業(yè)務(wù)按本地時間看跨零點的記錄會歸屬到前一天做日報表的時候尤其明顯。解決方案是在 Power Query 階段統(tǒng)一轉(zhuǎn)換時區(qū)而不是在 DAX 里處理這樣模型更干凈。6.3 文件體積與性能示例數(shù)據(jù)量都不大但你可以主動做一些性能練習(xí)。我的做法是把零售示例的數(shù)據(jù)復(fù)制二十遍人為造出幾十萬行然后觀察報表的響應(yīng)速度。幾個有用的結(jié)論第一把不必要的高基數(shù)列比如訂單號、客戶 ID從視覺對象里移除能明顯減少查詢的列數(shù)第二維度表的列數(shù)寧可多也別怕事實表的列要精簡只留建模和分析真正需要的第三日期表用CALENDARAUTO生成時會自動覆蓋所有年份但如果你的數(shù)據(jù)里有一個錯誤年份比如 2099 年日期表會被撐到一百多年性能直接崩所以生成前先檢查日期列的極值。另外一個容易被忽略的點計算列用得多文件就大。因為它把結(jié)果實打?qū)嵈孢M模型里了。如果你有幾個計算列只是中間過程用完就不再引用可以考慮改成度量值或者放到 Power Query 里處理。7. 一套可執(zhí)行的練習(xí)安排7.1 六周練習(xí)節(jié)奏光有案例沒有節(jié)奏很容易變成打開看一眼就關(guān)掉。我按自己帶人的經(jīng)驗給一個六周的安排。第一周把零售示例的 .pbix 完整打開逐個頁面點一遍重點記錄每個視覺對象用了什么字段、什么圖表類型先不動手只觀察。第二周用原始數(shù)據(jù)從零導(dǎo)入建好關(guān)系模型把第一周記錄的視覺對象復(fù)現(xiàn)出一半。第三周補完所有視覺對象并開始寫時間智能的度量值把同比、累計加進去。第四周換到客戶盈利能力或銷售與市場示例重點練占比、排名、分檔。第五周挑一個人力資源或供應(yīng)商質(zhì)量示例練時間智能和比率類指標(biāo)。第六周做前面提到的綜合復(fù)盤——刪掉報表只留模型自己設(shè)計三個業(yè)務(wù)問題從頭做一遍。這個安排的邏輯是先看、再做、后改、最后自己出題每周的產(chǎn)出都是可見的不容易半途而廢。如果時間緊可以把前四周壓縮成兩周但第六周的綜合復(fù)盤不能省。7.2 從模仿到改造的進階路徑練到一定階段你會發(fā)現(xiàn)一個問題照著官方做很順一旦換成自己的業(yè)務(wù)數(shù)據(jù)就卡住。這是正常的因為示例數(shù)據(jù)是被收拾干凈的而真實數(shù)據(jù)總有各種意外。我一般建議做三件事來過渡。第一是主動制造臟數(shù)據(jù)。拿示例數(shù)據(jù)復(fù)制一份手工往里加空值、加重復(fù)行、把日期格式打亂然后看看你的模型和度量值會不會出錯。這個方法很土但效果出奇地好能提前暴露模型里靠數(shù)據(jù)正好干凈才成立的假設(shè)。第二是換業(yè)務(wù)問題。同一份零售數(shù)據(jù)你既可以問哪個區(qū)域的銷售額最高也可以問哪些門店的客單價在下滑。后者的寫法完全不同需要計算客單價、做時間對比、篩選下滑項一套組合下來你對 DAX 的理解會明顯上一個臺階。第三是給別人講一遍。把你自己做的報表頁打開對著它講三分鐘說清楚每個數(shù)字的口徑、每個圖想回答什么問題。講不順的地方就是你沒想清楚的地方。我自己用這個方法揪出過好幾個看起來對、其實口徑有問題的指標(biāo)。最后分享一個我自己的小習(xí)慣每做完一個示例我都會在文件里留一張復(fù)盤頁寫上這個案例教了我什么、我在哪里卡過、下次要注意什么。攢到第十一頁的時候回頭看那基本就是一本屬于自己的 Power BI 學(xué)習(xí)筆記了。