數據可視化之powerBI技巧(十一)基於SQL思維的PowerBI DAX實戰


本文來自於PowerBI星球嘉賓天行老師的分享,天行老師不僅DAX使用嫻熟,更是精通SQL,下面就來欣賞他利用SQL思維編寫DAX解決問題的一個實戰案例。


 

基於SQL思維使用DAX解決實戰問題

作者:天行

 

學習掌握DAX語言的初期,尤其是剛開始嘗試將DAX應用到實戰中時,書上的、別人的例子永遠是別人的,自己工作中的問題還是找不到如何下手。

其實如果有SQL的使用經驗,上手DAX就相對容易很多,尤其對於工作實踐中的復雜邏輯,使用SQL思維,進行逐步分解,然后用DAX的方式去具體實現,確實是高效的解決方法。

正好星球學友Mars懸賞征求“一次性解決率“的方案,借此機會,我們一起來實踐一下基於SQL思維如何使用DAX來解決這個問題。

問題描述

某客服中心,對每個客服代表的階段接聽客戶來電的問題解決情況進行統計分析,設定所接待客戶在24小時以內沒有再次來電,視為一次性有效解決。現需根據系統導出的每個客戶代表接聽客戶的手機號碼及呼入時間,統計每個客戶代表的一次性有效解決率。

查看具體數據列表,進一步理解問題細節:

相關字段有【員工姓名】、【客戶電話】、【開始時間】

  • 一次性有效解決率=一次性有效解決筆數/接聽來電總量

解決思路

 

這個問題看似簡單,按員工分類匯總筆數就是接聽來電總量,剔除同一來電在24小時之內的重復值就是一次性有效解決筆數,太Easy了!

但真正有實際工作經驗的人肯定不會這么輕易得出結論,而是在動手之前會去仔細研究實務中的具體規則,進而提前考慮統計結果出來之后的應用場景,比如:

1、員工的接聽總量的規則是什么?重復撥打的用戶什么情況下算?什么情況下不算?

2、一次性有效解決的規則是什么?客戶撥打會有哪幾種可能?哪種可能算有效解決?哪種可能不算有效解決?

3、如果一次性有效解決率是對員工的考核,那么結果出來之后,員工將有查詢核對的需求,具體要准備哪些信息才能滿足員工查詢的需求?

這些問題沒有明確的規則,所謂的解決方案怎么可能滿足實際業務需求呢?

通過與Mars溝通,明確了規則,也就可以將待解決的問題進行邏輯化描述了:

 

1、接聽總量=全部接聽電話數量-同一號碼上次本人接聽時間間隔不足24小時的接聽數量。

要判斷同一號碼本人上次接聽是否間隔不足24小時,就要知道每個客戶電話,本人上一次接聽的時間,並基於此算出兩次接聽之間的間隔。

那么用SQL思維如何解決這個問題?

簡單說就是選擇包含所需數據項的大數據集,然后通過細節條件進行篩選,精准得到符合條件的子數據集。最后對子數據集進行計數、求和、最大/小值和平均值等聚合計算,得到所需分析結果。

那么【全部接聽電話數量】就是包含所需數據項的大數據集,在具體案例里面就是某話務員接聽的所有電話數量。

【同一號碼上次本人接聽時間間隔不足24小時的接聽電話數量】就是細節條件滿足【本人本次接聽時間】-【本人上次接聽時間】<=86400秒的接聽電話數量。

好,問題簡化成求【本人上次接聽時間】了,按照剛才的SQL思維繼續推演:

在這個問題中,包含所需數據項的大數據集=【本人接聽此號碼的所有記錄】中的【接聽時間】。

假如【本人接聽此號碼的所有記錄】有多條(實務中就是接聽該客戶電話在2次以上),那么【本人上次接聽時間】就應該是大數據集(【本人接聽此號碼的所有記錄】中【接聽時間】)中小於【本人本次接聽時間】的最大值。

不再重復以上的推演過程,運用SQL思維抽絲剝繭得到一次性有效解決的數量的描述條件。

2、一次性有效解決量=接聽總量-同一號碼任意人下次接聽時間間隔不足24小時的接聽數量

 

【同一號碼任意人下次接聽時間間隔不足24小時的接聽數量】=【本人本次接聽時間】-【任意人下次接聽時間】

【任意人下次接聽時間】為大於【本人本次接聽時間】的所有此電話號碼的【接聽時間】中的最小值

梳理一下在Power BI中的具體實現操作:

編寫【上一次本人接聽電話時間】、【距上次時間差額】、【下一次任意人接聽電話時間】、【距下次時間差額】等4個計算列

編寫【接聽客戶總量】、【未一次性解決客戶數】、【一次性解決率】等3個度量值

代碼解析

(一) 計算列

 

在樣本數據表中添加以上4個計算列后的效果如下:

 

有了這4個輔助列,按照剛才SQL思維的推演,在電子表格中分別設置篩選條件,就可以得到【接聽客戶總量】和【未一次性解決客戶數】的明細數據。

(二) 度量值

在Power BI中,使用計算表可以方便快速地得到每個話務員的統計結果,可以理解為Excel中的數據透視表。

 

 

這里用到了構建計算表的方式,本質上每添加一列的代碼可原樣復制成為一個度量值。

從代碼截圖的紅框部分可以將剛才SQL思維的推演過程與DAX的代碼實現結合起來細細咀嚼,提煉模式,化為己用。

要點小結

【一次性解決率】這個具體問題本身的價值似乎並不大,但其實融匯了Power BI投入實戰所需要掌握的大多數技能,嘗試小結如下:

(一) 思維能力

 

1、將復雜問題分解成簡單問題的技能:即如何將一個大問題拆解成若干小問題組件的能力。在這個案例里面就是將【一次性解決率】拆解成求【接聽客戶總量】和【未一次性解決客戶量】的需求。

2、將業務問題明晰成SQL邏輯的技能:即如何將現實問題歸納為將全部明細數據通過條件篩選后,通過聚合計算得到分析值的分析能力。在這個案例中就是在第二節中的SQL邏輯分析過程。

3、將計算列和度量值靈活結合解決問題的技能:剛接觸Power BI,往往對計算列更青睞,Excel的思維習慣使然;熟悉了DAX,恨不得什么東西都要用度量值去實現,追求動態的極致。其實,在具體工作中,往往快速准確得到分析結果才是價值所在。通過計算列和度量值的搭配使用,最高效率地解決現實問題是永遠在磨練路上的核心技能。

(二) 技術能力

 

1、在計算列中掌握行上下文和篩選上下文的組合使用,以及行上下文的轉換。具體而言指在掌握計算列中的X函數(迭代器)應用的能力。

2、利用VALUES函數靈活返回表或值的能力。

3、利用ADDCOLUMNS系列函數(包括SELECTCOLUMNS函數)靈活構建計算表的能力。

4、利用FILTER函數靈活返回自定義表的能力。

5、利用SUMMARIZE系列函數(包括SUMMARIZECOLUMNS、GROUPBY函數)進行靈活聚合計算的能力。

掌握了這些技能,使用DAX解決現實中的大多數日常問題應該胸有成竹了,但是如何才能掌握呢?首先從動手練習開始吧,隨文附上源數據,供大家參考練習。(后台回復"SQL思維"獲取本文數據源文件)

最后出一個小題目,讀者可以自我檢查一下這篇文章學習的效果。

這個案例中,某話務員對他的一次性解決率評價不服,提出要查看每一筆未能一次性解決的客戶電話下一次是哪位話務員接聽的,便於了解客戶再次來電的真正原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM