當初學如何使用 Power Pivot 時,大多數使用者會發現真正的力量在於以某種方式彙整或計算結果。 如果你的資料有一欄有數值,你可以在樞紐分析表或 Power View 欄位列表中選取,輕鬆彙整。 本質上,因為它是數值,會自動被加總、平均、計數,或你選擇的任何類型的彙總。 這被稱為隱性度量。 隱式測度非常適合快速且簡便的聚合,但它們有其限制,而這些限制幾乎總能透過明確 測度 和 計算欄位來突破。
我們先來看一個範例,使用計算欄位為一個名為 Product 的表格中每一列新增文字值。 產品表的每一列都包含我們銷售的每項產品的各種資訊。 我們有產品名稱、顏色、尺寸、經銷商價格等欄位。 我們有另一個相關的表格,名為 Product Category,其中包含一個欄位 ProductCategoryName。 我們希望產品表中的每個產品都能包含產品類別表中的產品類別名稱。 在我們的產品表中,我們可以建立一個計算欄位,名為產品類別,如下所示:
我們的新產品類別公式使用 RELATED DAX 函式,從相關產品類別表中的 ProductCategoryName 欄位取得數值,然後將每個產品的數值 (每列) 產品表中輸入。
這是我們如何利用計算欄位為每一列加入固定值的絕佳範例,這些值可以在後續的樞紐分析表的 ROWS、COLUMNS 或 FILTERS 區域或 Power View 報告中使用。
我們再舉一個例子,想計算產品類別的利潤率。 這種情況很常見,即使在很多教學中也是如此。 我們在資料模型中有一個銷售資料表,裡面有交易資料,銷售資料表和產品類別資料表之間存在關聯。 在銷售表中,我們有一欄是銷售金額,另一欄是成本。
我們可以建立一個計算欄位,透過從 SalesAmount 欄位的數值減去 COGS 欄位的數值,計算出每一列的利潤金額,就像這樣:
現在,我們可以建立樞紐分析表,並將產品類別欄位拖曳到 COLUMNS,新的 Profit 欄位 (PowerPivot 表格中的欄位是 PivotTable 欄位清單中的欄位) 。 結果是一個隱含的衡量指標,稱為 利潤總和(Sum of Profit)。 它是從利潤欄中各不同產品類別中累積的數值。 結果看起來像這樣:
在這種情況下,利潤只有在價值中才有意義。 如果我們將利潤放在欄位區,我們的樞紐分析表會是這樣:
我們的利潤欄位放在欄位、列或篩選區域時,沒有提供任何有用的資訊。 它只有在 VALUES 區域作為彙總值才有意義。
我們所做的是建立一個名為「利潤」的欄位,計算銷售表中每一列的利潤率。 接著我們將利潤加入樞紐分析表的價值區,自動建立隱含衡量指標,計算每個產品類別的結果。 如果你以為我們真的把產品類別的利潤計算了兩次,那你說得沒錯。 我們首先計算銷售表中每一列的利潤,然後將利潤加入 VALUES 區域,並彙整每個產品類別。 如果你也以為我們其實不需要建立利潤計算欄位,那你說得沒錯。 那麼,如果不建立「利潤計算」欄位,我們該如何計算利潤呢?
利潤,其實更適合用明確的衡量標準來計算。
目前,我們將在樞紐分析表的銷售表中保留利潤計算欄位,將產品類別放在欄位,利潤則放在價值中,以便比較結果。
在我們銷售表的計算區,我們將建立一個名為 「總利潤 (」的指標,以避免將衝突命名為) 。 最終,結果會和之前一樣,但不會有利潤計算欄位。
首先,在銷售表中,我們選擇銷售金額欄位,然後點擊自動加總以建立明確的 銷售金額總和 度量。 請記住,明確的度量是在 Power Pivot 表格的計算區域中建立的。 我們對COGS欄位也是一樣。 我們將重新命名這些總 銷售金額 與 總銷貨成本 ,以便更容易辨識。
接著我們用這個公式建立另一個測度:
總利潤:=[總銷售額] - [總銷貨成本]
注意
我們也可以將公式寫成 Total Profit:=SUM ([SalesAmount]) - SUM ([COGS]) ,但透過建立獨立的 Total SalesAmount 和 Total COGS 指標,我們也能在樞紐分析表中使用它們,並且能作為各種其他衡量公式的參數。
將新的總利潤指標格式改為貨幣後,我們可以將其加入樞紐分析表。
你可以看到我們新的總利潤衡量方式,回傳的結果與建立利潤計算欄位並放入 VALUES 時相同。 差別在於我們的總利潤衡量更有效率,也讓我們的資料模型更乾淨、更精簡,因為我們是在計算時,且只針對樞紐分析表中選擇的欄位。 我們其實不太需要那個利潤計算欄位。
為什麼這最後一部分很重要? 計算出的欄位會將資料加入資料模型,而資料會佔用記憶體。 若刷新資料模型,還需處理資源來重新計算利潤欄位中的所有數值。 我們其實不需要這麼多資源,因為我們真的想在樞紐分析表中選擇想要獲利的欄位時,先計算利潤,比如產品類別、地區或日期。
我們再來看另一個例子。 一個計算出來的欄位,結果乍看之下看起來正確,但......
在這個例子中,我們想以總銷售額的百分比來計算銷售金額。 我們在銷售表中建立一個名為 銷售百分比 的計算欄位,如下所示:
我們的公式是:對於銷售表中的每一列,將 SalesAmount 欄位的金額除以 SalesAmount 欄位所有金額的總和。
如果我們建立樞紐分析表,將產品類別加入欄位,並選擇新的 銷售百分比 欄位放入價值,我們會得到每個產品類別的銷售百分比總和。
好。 目前看起來不錯。 不過,我們再加個切片軟體。 我們先輸入日曆年,然後選擇年份。 此時我們選擇 2007 年。 這就是我們得到的結果。
乍看之下,這似乎仍然正確。 但我們的百分比應該是100%,因為我們想知道2007年各產品類別佔總銷售的百分比。 那麼,到底哪裡出了問題?
我們的銷售百分比欄位計算出每列的百分比,即銷售金額欄位的值除以銷售金額欄位所有值的總和。 計算欄位中的數值是固定的。 它們是表格中每一列的不變結果。 當我們將 銷售百分比 加入樞紐分析表時,它是以銷售金額欄位中所有值的總和彙總而成。 銷售百分比欄位中所有數值的總和永遠是 100%。
秘訣
務必閱讀《 DAX 公式中的情境》。 它提供了對列層級上下文與過濾器上下文的良好理解,這正是我們在這裡描述的。
我們可以刪除「銷售百分比」的計算欄位,因為那對我們沒幫助。 相反地,我們將建立一個衡量標準,無論使用任何篩選器或切片軟體,都能正確計算我們佔總銷售百分比。
還記得我們之前建立的 TotalSalesAmount 指標嗎?就是那個簡單地將 SalesAmount 欄位加總的。 我們在總利潤指標中用它作為論點,未來也會在新的計算欄位中再次使用它作為參數。
秘訣
建立像是總銷售金額和總銷貨成本這類明確的指標,不僅在樞紐分析表或報告中有用,當你需要結果作為參數時,也能作為其他衡量指標的參數。 這會讓你的公式更有效率且更容易閱讀。 這是很好的資料建模練習。
我們用以下公式建立一個新的測度:
佔總銷售額百分比:= ([總銷售額]) / CALCULATE ([總銷售額],ALLSELECTED () )
此公式說明:將總銷售金額的結果除以銷售金額的總和,且不含樞紐分析表中定義的任何欄位或列過濾器。
秘訣
請務必閱讀 DAX 參考文獻中關於 CALCULATE 和 ALLSELECTED 函數的相關內容。
現在,如果我們將新的 銷售百分比 加到樞紐分析表中,我們得到:
看起來比較好。 現在,我們對每個產品類別的 總銷售百分比 ,是根據2007年度總銷售額的百分比計算出來。 如果我們在 CalendarYear 切片器中選擇不同的年份,或超過一年,我們會獲得產品類別的新百分比,但總數仍然是 100%。 我們也可以加入其他切片軟體和過濾器。 我們的「總銷售百分比」指標無論使用任何切片軟體或篩選器,都會產生一定比例的總銷售額。 對於度量,結果總是根據欄位和行欄位所決定的上下文,以及所應用的篩選器或切片器來計算。 這就是衡量的力量。
以下是幾個指引,幫助你判斷計算出的欄位或測度是否適合特定計算需求:
使用計算欄位
- 如果你想讓你的新資料出現在樞紐分析表的列、欄、篩選器,或 Power View 視覺化中的軸、圖例或 TILE BY,你必須使用計算出的欄位。 就像一般資料欄位一樣,計算出來的欄位可以作為任何區域的欄位使用,如果是數字欄位,也可以以 VALUE 聚合。
- 如果你想讓新資料成為該列的固定值, 舉例來說,你有一個日期表,裡面有一欄是日期,你想要另一欄只包含月份數字。 你可以建立一個計算欄位,只計算日期欄位中的日期月份號碼。 例如,=MONTH ('Date'[Date]) 。
- 如果你想為每一列加入文字值到表格,可以使用計算欄位。 帶有文字值的欄位永遠無法被彙總成 VALUES。 例如,=FORMAT ('Date'[Date],“mmmm”) 會給我們日期表中日期欄中每個日期的月份名稱。
使用措施
- 如果你的計算結果永遠依賴於你在樞紐分析表中選擇的其他欄位。
- 如果你需要做更複雜的計算,比如根據某種濾波器計算計數,或計算年比或變異數,就用計算欄位。
- 如果你想將工作簿的大小控制在最小並最大化效能,盡可能將計算量化為衡量指標。 在許多情況下,你所有的計算都可以作為衡量,大幅減少工作簿的體積並加快刷新時間。
請記住,建立像我們用利潤欄位那樣計算的欄位,然後彙整成樞紐分析表或報告,這沒什麼問題。 這其實是一個非常好且簡單的方法來學習並建立自己的計算方法。 隨著你對這兩個極具功能功能的理解加深,你會想要建立最有效率且最準確的資料模型。 希望你在這裡學到的東西對你有幫助。 還有其他很棒的資源可以幫助你。 以下是其中幾項: DAX 公式中的上下文、 Power Pivot 中的聚合,以及 DAX 資源中心。 雖然內容稍微進階一些,主要針對會計和財務專業人士,但《 Microsoft Power Pivot in Excel》的損益資料建模與分析 範例中,充滿了很棒的資料建模和公式範例。