本文介紹一下平均值的計(jì)算,平均與求和類似,也是一種常用的聚合運(yùn)算,不過相對于求和,平均的邏輯稍微復(fù)雜一點(diǎn)。比如對2022年的訂單銷售額求和,無論是先按日求和還是先按照月求和,全年銷售額都是一樣的,但是對于計(jì)算全年的平均值,是按日計(jì)算平均值、還是按月計(jì)算平均值呢?這兩種邏輯的結(jié)果是完全不一樣的。計(jì)算平均值首先想到的函數(shù)肯定是AVERAGE,和Excel中的求平均一樣。以PowerBI星球的案例數(shù)據(jù)為例,寫個度量值:平均值 = AVERAGE('訂單表'[銷售額]) 在沒有任何上下文的情況下,結(jié)果是167.57。但是這個數(shù)據(jù)代表的是什么含義呢?是每日的平均銷售額、每個產(chǎn)品的平均銷售額、還是每筆訂單的平均銷售額呢? 經(jīng)過驗(yàn)證,可以看出這個數(shù)字是匯總銷售額除以訂單數(shù)量,也就是每一筆訂單的平均銷售額,為什么是這個邏輯呢?上面的度量值是一種簡寫,如果改用完整的寫法,就能清晰看出這個平均值的邏輯,上面度量值的完整寫法如下:平均值 =AVERAGEX( '訂單表' , '訂單表'[銷售額] ) 其實(shí)AVERAGE只是AVERAGEX的一種特殊形式,任何求平均值都可以用AVERAGEX來完成。AVERAGEX是個迭代函數(shù),其中第一個參數(shù),是需要迭代計(jì)算的表,在這個表的范圍內(nèi)計(jì)算平均值。對于上面寫的度量值,就是迭代訂單表的每一行,對每一行所對應(yīng)的銷售額,進(jìn)行求平均值,也就是每筆訂單的平均銷售金額(這個示例中,每一行是一筆訂單)。簡單來說,按照哪個維度求平均,就構(gòu)造這個維度的不重復(fù)列表,作為AVERAGEX的第一個參數(shù),比如計(jì)算每日的平均銷售額,第1個參數(shù)應(yīng)該用日期的列表,你可以試試這樣寫度量值:第1個參數(shù)是沒有問題的,但是這個度量值返回的結(jié)果竟然和銷售額總計(jì)是一致的: 這個問題出在第2個參數(shù)上,AVERAGEX的第一個參數(shù)表,提供的是行上下文,對第二個參數(shù)沒有篩選作用,所以每個日期計(jì)算的都是銷售額總計(jì),然后對這些總計(jì)數(shù)求平均,最終結(jié)果還是總計(jì)數(shù)本身。 這個問題該怎么解決呢?只需要行上下文轉(zhuǎn)換為篩選上下文就可以了,有兩種方式: 1、在第2個參數(shù)外面套上CALCULATE 度量值的特性是內(nèi)置CALCULATE,可以自動將行上下文轉(zhuǎn)換為篩選上下文,所以可以先寫個基礎(chǔ)度量值:
銷售額合計(jì) = SUM( '訂單表'[銷售額] )
 利用上面兩種方式,就得到了正確的每日平均數(shù)據(jù),關(guān)于迭代函數(shù),一定要記住這個特性,當(dāng)發(fā)現(xiàn)結(jié)果不符合預(yù)期時,不要忘了上下文轉(zhuǎn)換的邏輯。通過上面的解釋,應(yīng)該理解了AVERAGEX的用法,下面再通過幾個計(jì)算平均值的常見場景來加深對它的理解。第1個參數(shù)構(gòu)造不重復(fù)的年月維度,這樣來寫度量值:
平均銷售額 按月 = AVERAGEX( VALUES('日期表'[年度月份]), [銷售額合計(jì)] )
 這個邏輯的詳細(xì)描述是,如果上下文是2021年3月,則計(jì)算2021年1-3月的每月平均數(shù)、如果是6月,則計(jì)算1-6月的每月平均數(shù),這就要構(gòu)造一個本年至今的年度月份列表,如下面度量值公式中的陰影部分: 使用時間智能函數(shù)找出本年至今的所有日期,然后從這些日期中提取年月的不重復(fù)列表,作為AVERAGEX的第一個參數(shù);第二個參數(shù)用指標(biāo)的度量值。結(jié)果如下:  按年月和產(chǎn)品兩個維度計(jì)算平均值這個需求偶爾也會用到,計(jì)算平均每個產(chǎn)品每個月的銷售額,按兩個維度來計(jì)算平均,就需要構(gòu)造兩個維度的列表,可以這樣來寫度量值:
因?yàn)槿掌诒?、產(chǎn)品表都與訂單表建立有一對多的關(guān)系,所以這里可以用SUMMARIZE來構(gòu)造這兩個維度的列表,如果沒有這種關(guān)系,還可以用CROSSJOIN函數(shù)來構(gòu)造。 用年度作為上下文結(jié)果如下:  通過上面的介紹以及幾個例子,關(guān)于平均值如何計(jì)算應(yīng)該很清晰了,在寫度量值之前,先想清楚,對哪個維度求平均,然后構(gòu)造出這個維度的不重復(fù)列表作為AVERAGEX的第一個參數(shù),將指標(biāo)作為第二個參數(shù),另外,使用迭代函數(shù)時也要懂得如何將行上下文轉(zhuǎn)換為篩選上下文。
|