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