初次瞭解如何使用Power Pivot時,大部分的用戶會發現實際電力正在以某種方式匯總或計算結果。 如果您的資料列含有數值,您可以在數據透視表或 Power View 欄位清單中選取數據,輕鬆匯總數據。 根據本質,因為它是數值,因此會自動加總、平均、計算,或您選取的任何匯總類型。 這稱為隱含量值。 隱含量值非常適合快速且輕鬆地匯總,但是有限制,而且這些限制幾乎一律可以用明確的 量值 和 計算結果列來克服。
讓我們先看看一個範例,其中我們使用計算結果列為名為 [產品] 的數據表中的每一列新增文字值。 [產品] 資料表中的每一列都包含關於我們所銷售每個產品的各種相關信息。 我們有 [產品名稱]、[色彩]、[大小]、[經銷商價格] 等欄。 我們有另一個名為 [產品類別] 的相關數據表,其中包含 ProductCategoryName 數據行。 我們想要的是讓 [產品] 資料表中的每個產品包含 [產品類別] 數據表中的產品類別名稱。 在 [產品] 數據表中,我們可以建立名為 [產品類別] 的計算結果列,如下所示:
我們新的 [產品類別] 公式使用 RELATED DAX 函數,從相關 [產品類別] 資料表的 [ProductCategoryName] 數據行取得值,然後在 [產品] 資料表中的每一列) 輸入每個產品的值 (。
這是一個很好的範例,說明如何使用計算結果列,為日後可在數據透視表的 [列]、[欄] 或 [FILTERS] 區域或 Power View 報表中使用的每一列新增固定值。
讓我們建立另一個範例,我們想要計算產品類別的利潤。 這是常見的案例,即使是在許多教學課程中也是如此。 我們在數據模型中有具有交易數據的 [銷售] 數據表,且 [銷售] 數據表與 [產品類別] 數據表之間有關聯。 在 [銷售] 數據表中,我們有一個包含銷售金額的數據行,以及另一個含有成本的數據行。
我們可以建立計算結果列,藉由從 [SalesAmount] 數據行中的值減去 COGS 數據行中的值,來計算每一列的利潤金額,如下所示:
現在,我們可以建立數據透視表,並將 [產品類別] 欄位拖曳到 COLUMNS,而我們在 PowerPivot 數據表中數據表中數據行 (新的 [Profit] 欄位則是 [數據透視表字段清單]) 中的字段。 結果得出名為 Sum of Profit 的隱含量值。 這是每個不同產品類別的 [利潤] 欄中值的匯總金額。 結果看起來像這樣:
在此情況下,Profit 在 VALUES 中做為欄位是有意義的。 如果我們將 Profit 放在 COLUMNS 區域,數據透視表看起來會像這樣:
我們的 Profit 欄位在放置於 COLUMNS、ROWS 或 FILTERS 區域時,不會提供任何有用的資訊。 它在 VALUES 區域中做為匯總值才有意義。
我們所做的是建立一個名為 Profit 的數據行,該欄會計算 Sales 數據表中每一列的利差。 接著我們將 Profit 新增至數據透視表的 [值] 區域,自動建立隱含量值,其中會針對每個產品類別計算結果。 如果您認為我們的產品類別真的計算了兩次利潤,則表示您是正確的。 我們先計算 Sales 數據表中每個數據列的利潤,然後將 [利潤] 新增到每個產品類別匯總的 [值] 區域。 如果您也認為我們並不需要建立 Profit 計算結果列,您也是正確的。 但是,我們該如何計算利潤而不建立 Profit 計算結果列?
利潤,最好用明確的量值來計算。
目前,我們要在數據透視表的 [值] 中,將 [銷售] 數據表中的 [利潤] 計算結果列保留在 [COLUMNS] 和 [利潤] 中,以比較結果。
在 [銷售] 數據表的計算區域中,我們將建立名為 [合計利潤 ] (的量值,以避免命名衝突) 。 最後,它會產生與之前相同的結果,但不會產生 Profit 計算結果列。
首先,在 [銷售] 數據表中,選取 [SalesAmount] 數據行,然後按兩下 [自動求和] 以建立明確的 [SalesAmount加總] 量值。 請記住,明確量值是我們在 Power Pivot 數據表的計算區域中建立的量值。 我們也會對 COGS 資料行執行相同的動作。 我們將重新命名這些 Total SalesAmount 和 Total COGS ,以便更容易識別。
然後,我們使用此公式建立另一個量值:
Total Profit:=[ Total SalesAmount] - [TOTAL COGS]
附註: 我們也可以將公式寫成 Total Profit:=SUM ([SalesAmount]) - SUM ([COGS]) ,但透過建立個別的 [總銷售額] 和 [合計 COGS] 量值,我們也可以在數據透視表中使用這些量值,而且可以在各種其他量值公式中使用它們做為自變數。
將新的合計利潤量值格式變更為貨幣之後,我們可以將它新增至數據透視表。
您可以看到我們新的 [合計利潤] 量值會傳回與建立 Profit 計算結果列,然後將它放在 VALUES 中相同的結果。 差異在於我們的 [合計利潤] 量值更有效率,並讓我們的數據模型更乾淨、更精簡,因為我們目前只針對我們為數據透視表選取的字段進行計算。 畢竟,我們並不需要 Profit 計算結果列。
為什麼最後一個部分很重要? 計算結果欄會將數據新增至數據模型,而數據會佔用記憶體。 如果我們重新整理數據模型,也需要處理資源以重新計算 Profit 欄中的所有值。 我們並不需要佔用像這樣的資源,因為當我們在數據透視表中選取要 Profit 的欄位時,我們真的想要計算利潤,例如產品類別、地區或日期。
讓我們看看另一個範例。 其中一個計算結果列建立的結果,乍看之下看起來是正確的,但是...
在此範例中,我們想要以佔總銷售額的百分比來計算銷售量。 我們在 [銷售] 數據表中建立一個名為 [銷售量百分比] 的 計算結果欄,如下所示:
我們的公式指出:針對 [銷售] 數據表中的每一列,將 [SalesAmount] 數據行中的金額除以 [SalesAmount] 欄中所有金額的加總。
如果我們建立數據透視表並將產品類別新增至 COLUMNS,然後選取 [銷售] 欄中新的 [百分比 ] 來將它放到 [值] 中,我們會取得每個產品類別銷售總額的總和。
還行。 到目前為止,這看起來不錯。 但是,讓我們新增交叉分析篩選器。 我們新增 「行事歷年」,然後選取一年。 在此情況下,我們選取 [2007]。 這是我們取得的功能。
乍看之下,這可能仍然正確無誤。 但是,我們的百分比實際上應該總計 100%,因為我們想知道 2007 年每個產品類別的總銷售額百分比。 那麼哪裡出了問題呢?
我們的 [銷售額百分比] 欄會針對 SalesAmount 欄中值的每一列計算百分比,除以 [SalesAmount] 欄中所有值的總和。 計算結果列中的值是固定的。 這是表格中每個數據列不可復原的結果。 當我們將 銷售的百分比 加到數據透視表時,它會匯總為 SalesAmount 欄中所有值的總和。 [銷售額] 欄中所有值的總和永遠為 100%。
提示: 請務必閱讀 DAX 公式中的上下文。 它可讓您深入瞭解列層級上下文及篩選上下文,這也是我們在此描述的內容。
我們可以刪除 [銷售額百分比] 計算結果列,因為這不會對我們有所説明。 相反地,我們將建立一個可正確計算總銷售額百分比的量值,不論套用了任何篩選或交叉分析篩選器。
還記得我們先前建立的 TotalSalesAmount 量值,也就是只加總 SalesAmount 數據行的量值嗎? 我們在 Total Profit 量值中使用它做為自變數,我們將在新的計算欄位中再次使用它做為自變數。
提示: 在數據透視表或報表中,建立如 Total SalesAmount 和 Total COGS 等明確量值不僅有用,而且在您需要結果為自變數時,這些量值在其他量值中也很實用。 這可讓您的公式更有效率且更容易閱讀。 這是良好的數據模型做法。
我們會使用下列公式建立新的量值:
總銷售額的百分比:= ([Total SalesAmount]) / CALCULATE ([Total SalesAmount], ALLSELECTED () )
此公式指出:將結果與 Total SalesAmount 除以 SalesAmount 的總和,而不需要數據透視表中所定義以外的任何欄或列篩選。
提示: 請務必閱讀 DAX 參照中的 CALCULATE 和 ALLSELECTED 函數。
現在,如果我們將 總銷售額的新增百分比 新增至數據透視表,我們就會收到:
看起來好多了。 現在,我們每個產品類別 的總銷售額百分比 ,會計算為 2007 年總銷售額的百分比。 如果我們選取不同的一年,或在 CalendarYear 交叉分析篩選器中選取一年以上,我們會取得產品類別的新百分比,但是總計仍然是 100%。 我們也可以新增其他交叉分析篩選器和篩選器。 無論套用何種交叉分析篩選器或篩選,我們佔總銷售額的百分比一律會產生佔總銷售額的百分比。 使用量值時,結果一律會根據 COLUMNS 和 ROWS 中的欄位所決定的上下文,以及套用的任何篩選或交叉分析篩選器來計算。 這是量值的力量。
以下是一些指導方針,可協助您判斷計算結果列或度量是否適合特定計算需求:
使用計算結果列
-
如果您希望新數據出現在數據透視表中的 [列]、[欄] 或 [篩選],或 Power View 視覺效果中的 [座標軸]、[圖例] 或 [磚依據],則必須使用計算結果列。 就像一般數據域一樣,計算結果列可以做為任何區域的欄位,如果是數值,也可以在 VALUES 中匯總。
-
如果您想要將新資料設為該列的固定值。 例如,您有一個含有日期數據行的日期數據表,而您想要另一個只包含月份數的數據行。 您可以建立計算結果列,只計算 [日期] 欄中日期的月數。 例如,=MONTH ('Date'[Date]) 。
-
如果您想要在表格中新增每一列的文字值,請使用計算結果列。 具有文字值的欄位永遠無法在 [值] 中匯總。 例如,=FORMAT ('Date'[Date],“mmmm”) 會在 [日期] 數據表的 [日期] 數據行中為每個日期提供月份名稱。
使用量值
-
如果您的計算結果永遠取決於您在數據透視表中選取的其他欄位。
-
如果您需要執行更複雜的計算,例如根據某種篩選來計算計數,或是計算年份或變異數,請使用導出字段。
-
如果您想要將活頁簿的大小保持在最低限度並最大化其效能,請盡可能建立任意數量的計算量值。 在許多情況下,您所有的計算都可以進行量值,大幅縮減活頁簿大小並加快重新整理時間。
請記住,建立計算結果列並沒有任何錯誤,就像我們使用 Profit 數據行一樣,然後在數據透視表或報表中匯總。 實際上,這是一種很好且簡單的方法,可讓您瞭解並建立自己的計算。 隨著您對 Power Pivot 這兩項強大功能的理解而成長,您會想要建立最有效率且最精確的數據模型。 希望您在這裡所學到的內容有説明。 還有一些其他很棒的資源也能協助您。 以下是幾個內容: DAX 公式中的上下文、 Power Pivot 中的匯總,以及 DAX 資源中心的上下文。 此外,雖然比較進階,並導向會計和財務專業人員,但 Excel 中含有Microsoft Power Pivot 的 [損益數據模型 ] 和 [分析] 範例會載入絕佳的數據模型和公式範例。