在學習PowerBI的過程中,尤其是剛接觸的時候,不可避免的會遇到各種各樣的錯誤,有時自己怎么檢查都沒法消除,不解決這個錯誤又沒法進行下一步的工作,經常會搞的自己煩悶無比,不過最后通過自己的苦苦摸索、或者他人的片語點撥而解決后,也會欣喜異常。
你遇到的問題,我同樣也都遇到過,並且我遇到的更多(因為我還接收到星友們遇到的各種問題:),這里歸納了一下初學者使用PowerBI時,幾個常見的錯誤以及解決的辦法。
01 | DAX書寫錯誤
剛開始在DAX編輯框建度量值時,總是眼前一堆紅色的波浪線有沒有,

經常有新人問我說,就是按照文章中的DAX一個個字符敲的,為什么會報錯,其實出現這個問題一般都是少了右括號,忘記輸入逗號或者有中文字符等,所以在編寫DAX時一定要切記:
- 每一個函數左右括號 () ,要配對;
- 引用表的單引號 '',不要漏;
- 參數之間的分隔逗號 , 不能缺少;
- 以上字符均要求為英文字符;
另外一定要按照格式規范書寫DAX(請參考:送你一份DAX格式指南),上圖中出現錯誤,其實還是比較容易排查出錯誤在那里的,如果全部寫在一行,有這些錯誤就更加頭大了。
這個問題一般都是出現在剛開始學習時,寫的多了基本都不會遇到或者出現這種提示可以馬上知道是哪里錯了。所以學習DAX時不要只看不練,或者練習時復制別人寫好的DAX,一定要自己親自動手去寫,鍛煉肌肉記憶,才能在需要編寫DAX的時候行雲流水。
02 | 函數使用錯誤
有些函數返回的表,若用於新建度量值,肯定返回錯誤,比如,

度量值需要返回的是一個值,而FILTER函數返回的表,所以它不能單獨用於建度量值,但該函數可以作為其他函數的參數使用,來建立度量值。
雖然上圖中的FILTER函數建度量值時出錯,但是卻可以建表,該表達式將返回所有北京的客戶的訂單表。
也有些函數返回的是值,若用於建表,也會報錯,比如,

CALCULATE函數返回的是一個值,不能用於建表。不過如果你確實想建一個只有一個值的表,也是可以做到的,可以在這個表達式外層套一個大括號{},正常返回一個表,

該表只有一個數據,為北京客戶貢獻的銷售額。
通過這種方式,也可以用於在數據視圖下,查看度量值的返回結果。
03 | 參數使用錯誤
參數錯誤的時候,有時並不會有紅色波浪線提醒,比如下圖,

提示MAX函數的參數只接受列,該錯誤就是參數應該為列的時候,使用了表。
還有的函數應該引用表,卻用了列或者值,

出現這種情況就是按照錯誤提示進行更改,再仔細研究一下該函數的介紹文檔,弄清楚該函數需要有幾個參數,以及每個參數分別是什么類型。
關於函數和參數的錯誤,主要是要理解DAX各類函數及其參數的用法,請參考:DAX中的表函數和值函數
04 | 作圖時出現錯誤
好不容易把度量值的DAX代碼調試好了,系統也沒有提示任何錯誤,比如這個度量值,

沒有錯誤提示好開心,現在就來看看到底是哪個客戶的單筆購買金額最高吧,用個卡片圖來展示,可結果卻是這樣,

世事難料啊,要崩潰了有沒有!
但是也不能因為這點小事崩潰啊,該做的還得繼續做,點擊“請參閱詳細信息”看看為什么會出錯?

原來是返回的值不唯一導致錯誤的。再回頭看看這個度量值,其實DAX代碼本身並沒有錯誤(所以沒有錯誤提示),但是邏輯上有bug,假如有多個客戶的訂單額都同時是最大訂單額,那么這個度量值無法返回唯一值,也就不能正常顯示出結果。
這個問題解決的辦法有很多,主要看你想要什么結果,如果只是想不出現錯誤提示,就可以在上面那個表達式中加一個判斷判斷來攔截錯誤,可使用IF和HASONEVALUE,

使用這個度量值肯定不會再有錯誤出現,但是如果有多個客戶,它也不會顯示出客戶姓名,只會顯示空白。
這個例子中確實有多個客戶的訂單額都是最大值,但是又想顯示出一個客戶姓名,這個問題可以改一下,比如最早達到最大訂單額的是哪個客戶?這就是一個確定的唯一客戶了,我不再詳細寫度量值了,大家可以拿這個簡單的例子練練手。
05 | 顯示結果不符合預期
寫度量值時沒有任何錯誤提示,把它拖入到圖表中也沒有錯誤,可是顯示的數據卻很奇怪,完全不是想象中的,

所有的數據都相同,沒有按上下文進行計算?
這個問題一般都是維度表和事實表沒有建立關系,或者沒有建立正確的關系,因此度量值沒有按照外部下上文正確計算。
遇到這種情況去建模視圖下,更改一下關系就可以了。
這里也建議大家,導入數據之后,先在建模視圖下建立正確的關系圖,然后再去着手去寫度量值。如果系統自動建立的,也要檢查一下,自動建立的關系是否與我們的分析邏輯一致。
06 | 使用度量值作為篩選維度
還有不少人問我,為什么我建立的度量值無法拖入到圖表里,我仔細一看,原來TA是想用這個度量值拖到圖表的軸上,或者是切片器中。
度量值作為動態的公式,只有在一定的上下文環境中才有確定的返回結果,所以PowerBI中默認它是不能作為篩選維度的。如果確實需要用這個維度,就去構建一個表吧。
這次就先寫這么多,以后有空了再總結其他的。
其實當我們開始學習一個新的事物時,都會遇到各種各樣的困惑和難題,有的人會抱怨這個工具太弱智,一點都不智能,然后就放棄了;也有的人試着去理解它內在的邏輯,然后利用它的邏輯來解決自己的問題,你屬於哪種人呢?
有問題不可怕,讓我們一起解決它,加入PowerBI星球,隨時問題答疑,更多資源分享。
不要忘了在評論區回復你的答案哦:)
