PowerBI分組統計,利用度量值如何實現?

在剛開始學習powerBI時,經常習慣於用計算列,分組也都是通過新建列的方式實現的,直觀上比較容易理解。

不過這樣都修改了原始數據的結構,如果我們不在源表上進行修改,直接通過度量值的方式來進行分組,是否可以實現呢?

答案當然是肯定的。

採用度量值的方式首先定義好分組的類別和標準,然後把需要分組的數據分別統計到指定的分組中。

依然按照上篇文章的數據,統計優秀、良好、及格和不及格的學生分別有多少?

成績表中的數據結構不做任何更改,我們先創建一個分組表,

如果成績落在最小值和最大值之間,就歸屬於該分組。

編寫度量值如下:

成績分組統計 =

CALCULATE(

    DISTINCTCOUNT('成績'[姓名]),

    FILTER('成績',

       AND(

         '成績'[數學成績]<=SELECTEDVALUE('分組表'[最大值]),

         '成績'[數學成績]>=SELECTEDVALUE('分組表'[最小值])

       )

    ) 

)

使用度量值和新建列的不同之處就是,新建列的行上下文是確定的,可以直接使用行字段,而度量值的外部上下文是動態的,所以無法直接和某個具體指標匹配,這時就要用到SELECTEDVALUE函數,它根據外部上下文的環境來進行動態匹配運算。

編寫度量值的表達式時,不知道如何查找外部上下文時,一定不要忘了SELECTEDVALUE函數。

利用矩陣來看看度量值的結果,

這樣每個類別的人數就統計出來了,不過有個問題是,總計行沒有計算出來。原因是由於SELECTEDVALUE函數函數只查找了分組表中的類別,而該表並沒有總計這個值,所以無法計算顯示爲空。

爲了使總計正常顯示,可以再加個判斷函數ISFILTERED,如果分組列中有該分類,就正常執行上面的度量值計算,否則返回成績表中人數合計。

更改後的度量值如下:

成績分組統計 =

IF(ISFILTERED('分組表'[分組]),

  CALCULATE(

    DISTINCTCOUNT('成績'[姓名]),

    FILTER('成績',

      AND(

        '成績'[數學成績]<=SELECTEDVALUE('分組表'[最大值]),

        '成績'[數學成績]>=SELECTEDVALUE('分組表'[最小值])

      )

    )

  ),

  DISTINCTCOUNT('成績'[姓名])

)

然後總計行會正常顯示。並且源數據發生變化,度量值返回的結果也會同步更新。

以上就是使用度量值進行分組的做法,DAX看起來很長,其實邏輯上比較簡單,理解它對進一步掌握DAX有很大幫助。

利用度量值,進行數據分析時可以更靈活的使用,以後還有更多文章介紹度量值分組的應用場景。

-精彩推薦-

PowerBI數據分析和可視化實戰案例

PowerBI時間相關的度量值,都在這裏了

PDF轉Excel,這個祕籍推薦給你

採悟 from PowerBI星球

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章