Power BI系列:計算列與度量值

當我

是小必,很高興在這裡遇見你,以Excel和Power BI會友。

Power BI系列:計算列與度量值

本期內容主要講解Power BI中兩個重要的概念,計算列與度量值。在學習Power BI的過程中,這是兩個無法規避的概念,也是必學的內容。

1

計算列

計算列不是透過載入資料得到的,而是透過DAX公式建立的。

這部分類似於我們在Excel中建立的列。

在Power BI中新建列的可以透過選項卡中的【表工具】-【新建列】來完成。如我們針對下表中的價格與銷售數量相乘來計算銷售額。那麼公式可以寫成:

Power BI系列:計算列與度量值

計算列與其他的任何列一樣,都可以在矩陣和其他的報表中的行、列中來使用。

對於表中的其他任何列的計算都只能返回當前行對應的列的資料,無法直接使用其他行的資料。

計算列是始終存在於表中,是真實的

物理列

計算列計算時佔用的是模型的載入時間而不是查詢時間。計算列始終佔用的計算的非常寶貴的記憶體。

這注定我們在寫DAX公式的時候,最優的方案是減少計算列的使用。

2

度量值

當你想對錶中的多列進行聚合運算時,那你就應當考慮使用度量值。

度量值同計算列一樣,也是透過【新建度量值】的按鈕使用DAX的公式建立的,

雖然度量值要定義在表中,但是度量值並不屬於任何表

,可以單獨存在。

如我們現在使用計算列計算每個商品的毛利率,(即銷售額-成本額)/銷售額。那麼我們先來建立一個計算列的DAX公式:

將上面的結果放表表中。來看一下結果:

Power BI系列:計算列與度量值

我們發現上面的每一行都是正確的,但是總計行是錯誤的。上述表中計算的單個列的每行的總計,我們要計算的是和的比率,不是比率的和。那麼此時就需要使用度量了。

下面我們先建立3個計算列:

緊接著我們建立一個度量值,將度量值放入到表中得到了正確的結果(當然還有其他更加簡潔的方法,此處我們只做例子來說明):

Power BI系列:計算列與度量值

從上面的這個例子我們可以看出,計算列與度量都是使用DAX公式,但是他不同的是他們所使用的計值上下文是不一樣的。計算列只能依據所在表的當前行的環境來計算值,但是度量值是一個值,只有受到外部的篩選(如表和矩陣的行、列、篩選器或者其他的視覺物件等)的時候,會計算相應的值。

那麼

計算列與度量值到底有什麼區別

計算列是在模型重新整理時計算,是以所在表的當前的行作為計算環境(也叫計值上下文),對錶操作時是不會影響計算列的結果的;度量值是在當前的計算環境中進行聚合,受到外部篩選環境的影響。

在Excel中度量值通常是度量值的名稱後跟(:=)來定義,而在Power BI中,度量值與計算列時都可以直接以(=)來定義,當然度量值也可以使用(:=)來定義,但是Power BI會自動刪除":"。

3

計算列與度量值如何選擇

當既然計算列與度量值有區別,但是有一定的情況下,對於同一結果都能使用的時候,應該選擇那一個,這個由是需求來決定的:

每當你想執行以下操作時,都必須定義一個計算列:

將計算結果放在切片器中,或者在矩陣或透視表 (與量值區

域相對) 中的行或列中檢視結果,或者在 DAX 查詢中使用計算列作為篩選條件。

嚴格繫結到當前行的表示式。例如,價格 * 數量 無法對這兩列求和或求平均。

對文字或數字進行分類。例如,度量值的值範圍、客戶年齡的範圍,如 0-18、18- 25 等。這些類別通常用作篩選器或對值進行切片和分組。

但是,每當你想要顯示可以反應使用者選擇的計算值,並且這些值需要在報表中顯示為聚合值時,必須定義度量值,例如:

計算選擇報表的利潤百分比

計算產品相對所有產品的比率,但按年份和地區篩選

需要注意的是:

如果兩種方法都可以使用的話,那麼優先使用度量值。

當然,計算列與度量值並不是相互割裂的,我們也可以在計算列中使用度量值,這時,我們就需要了解一種叫“轉換上下文”的概念了。同時關於上下文的概念,我們會在後面的文章給出相關的解釋。參考資料:《DAX權威指南》

END

TAG: 度量計算DAXpowerbi