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