計算總計和其他彙總 (Reporting Services)

在 Tablix 資料區域中,您可以顯示報表資料集、資料區域或群組的彙總總數。您可以使用 [加入總計] 命令提供的預設彙總並使用預設範圍。或者,您可以指定與內建函數不同的彙總函數或指定不同的範圍。

若要自訂彙總計算,您可以結合自訂程式碼使用群組變數。如需詳細資訊,請參閱<在 Reporting Services 2008 中使用群組變數進行自訂彙總>(英文)。

了解加入總計命令

若要顯示 Tablix 資料區總計和群組小計,使用快速鍵的 [加入總計] 命令。[加入總計] 命令是與內容相關的命令。若是資料列群組區域中的資料格,[加入總計] 命令會自動加入總計群組之外的資料列。若是資料行群組區域中的資料格,[加入總計] 命令會自動加入總計群組之外的資料行。若是主體區域中包含數值欄位運算式的資料格,[加入總計] 命令則會提供要將總計加入資料列還是資料行的選擇。如需有關如何使用 [加入總計] 命令的詳細資訊,請參閱<如何:將總計加入到群組或 Tablix 資料區域 (Reporting Services)>。

根據預設,[加入總計] 命令會使用 Sum 函數。不過,您可以將 Sum 函數變更為不同的內建函數,並針對範圍執行不同的彙總。您也可以撰寫自己的運算式來計算某個範圍相對於另一個範圍的彙總值。例如,您可能想要計算某個群組值相對於完整資料集的百分比。如需有關如何使用其他內建函數執行彙總的詳細資訊,請參閱<使用運算式中的內建報表和彙總函數 (Reporting Services)>。如需內建函數的清單,請參閱<使用運算式中的內建報表和彙總函數 (Reporting Services)>。

了解預設範圍

當 Tablix 資料區域經過處理並轉譯後,報表設計師會評估每個 Tablix 在資料格範圍之內容中的值。當資料格位於與資料列群組或資料行群組關聯的資料列中時,一個資料格可以屬於多個群組。資料格所屬群組的集合、資料區域或評估運算式的資料集稱為「範圍」(Scope)。預設範圍是由資料格所屬的最內部資料列和資料行群組所定義。視覺提示可協助您識別所選資料格為其成員的群組。如需詳細資訊,請參閱<了解 Tablix 資料區域資料格、資料列及資料行>。

如需預設範圍的範例,下圖有一個以日期為基礎的父資料列群組、一個以順序為基礎的子資料列群組,以及一個詳細資料群組。

設計檢視:基本資料表中的總計

本圖在多個資料列中顯示一個欄位運算式,供 Tablix 本文資料格中的 Qty 和 LineTotal 使用。下列清單描述每個資料列中這些欄位運算式的預設範圍:

  • 資料列 1:這個資料列會顯示屬於靜態文字的資料行標籤。預設範圍為資料區域。此資料列只會重複一次,而且有時候稱為標頭資料列。

  • 資料列 2:此資料列會顯示詳細資料,以詳細資料的資料列控制代碼表示 (具有詳細資料列之三條平行線的資料列代碼)。[Qty] 的預設範圍為詳細資料群組,這是套用所有資料集、資料區域與群組篩選後繫結至此資料區域之資料集中的資料。在資料集查詢結果集中,每個資料列會重複一次這個資料列。[Qty] 這個值會顯示資料集中的詳細資料。

  • 資料列 3:此資料列會顯示彙總值。[Sum(Qty)] 的預設範圍為 Order 子資料列群組。每個唯一訂單號碼值的資料列會重複一次。[Sum(Qty)] 這個值會顯示每個訂單號碼的彙總總和。

  • 資料列 4:此資料列會顯示彙總值。[Sum(Qty)] 的預設範圍為 Date 父資料列群組。每個唯一日期值的資料列會重複一次。[Sum(Qty)] 這個值會顯示每個日期的彙總總和。

  • 資料列 5:此資料列會顯示彙總值。[Sum(Qty)] 的預設範圍為資料區域。此資料列只會重複一次,而且有時候稱為頁尾資料列。[Sum(Qty)] 這個值會顯示資料區域的彙總總和。

如需有關內容與範圍的詳細資訊,請參閱<使用運算式中的內建報表和彙總函數 (Reporting Services)>。如需有關解譯 Tablix 資料區域之視覺提示的詳細資訊,請參閱<了解 Tablix 資料區域資料格、資料列及資料行>。

利用具名範圍指定彙總計算

若要指定預設範圍之外的範圍,請指定「具名範圍」(Named Scope)。具名範圍包括資料集、資料區域或群組的名稱。由於運算式是與內容相關的,因此,您指定的具名範圍必須適用於內建函數。每個內建函數都會指定適合當做參數的範圍。如需詳細資訊,請參閱<使用運算式中的內建報表和彙總函數 (Reporting Services)>中的特定函數參考主題。

如需如何將預設範圍變更為具名範圍的範例,假設報表擁有下列資料結構:

  • 名稱為 Sales 的報表資料集。

  • 名稱為 Tablix1,而且擁有下列群組的資料表資料區域:

    • 名稱為 Category,且其子群組名稱為 Subcat 的父資料列群組。

    • 名稱為 Geography,且其子群組名稱為 CountryRegion 的父資料行群組。

針對此報表,您可以使用 [加入總計] 命令,將總計加入各種資料格中。這個產生的報表可能類似下圖。

矩陣、巢狀資料列和具有總計的資料行群組

在此圖表中,已經選取其中一個資料格。針對這個選取的資料格,橙色群組指標方括號顯示最內部的群組成員資格:Category 群組和 CountryRegion 群組。這些最內部的群組成員資格會定義此資料格的預設範圍 (針對選取的資料格,也有兩個顯示群組的灰色群組方括號:Subcat 資料列群組與 Geography 資料行群組。以灰色群組方括號標示的群組為適用於所選內部群組的外部群組,或者不在所選資料格的範圍內)。

這個選取的資料格擁有運算式:[Sum(LineTotal)]。根據資料格的範圍和運算式,轉譯的報表會將文字方塊的值顯示為每個特定 CountryRegion 值內,每個特定 Subcat 值的 [LineTotal] 總和。

您可以在不取代運算式中的 Sum 函數的情況下,以下列方式變更此資料格的範圍:

  • 將範圍變更為 Sales 資料集。例如,若要指定資料集總計,您要將運算式變更為 =Sum(Fields!LineTotal.Value, "Sales")。

  • 將範圍變更為完整的 Tablix1 資料區域。例如,若要計算某個群組佔總資料區域的百分比,您要將運算式變更為 =Sum(Fields!LineTotal.Value)/Sum((Fields! LineTotal.Value),"Tablix1")。

    在這個新的運算式中,分子 Sum(Fields! LineTotal.Value) 為每個類別目錄之行總計的總和。分母 Sum((Fields! LineTotal.Value), "Tablix1") 則是資料區域之行總計的總和。結果是每個類別目錄佔總資料區域的百分比。

    在選取的資料格中,您可以針對 Sum 函數指定下列其中一個群組範圍:CountryRegion、Geography 或 Category。您無法指定 Subcat 群組範圍,因為資料格不在與 Subcat 群組關聯的資料列中。

    [!附註]

    您僅能針對彙總函數指定一個單一範圍。您無法同時將 "Category" 和 "Geography" 指定為分母運算式的範圍。不支援指定多個範圍。

如需內建函數的清單,請參閱<使用運算式中的內建報表和彙總函數 (Reporting Services)>。

指定不同範圍的範例

下表提供使用預設範圍、資料區域範圍與資料集範圍之運算式的範例。這些範例假設有一個名稱為 "Tablix1" 的 Tablix 資料區域、一個名稱為 "Sales" 的資料集,以及一個名稱為 "LineTotal",且其中包含銷售訂單中行項目總計的欄位。

描述

運算式

目前範圍之行項目總計的總和。

=Sum(Field!LineTotal.Value)

(目前範圍之行項目總計的總和)/(資料區域之行總計的總和) 的百分比。

這個值會使用文字方塊的預設顯示格式進行格式化。

=Sum(Field!LineTotal.Value)/Sum(Field!LineTotal.Value,"Tablix1")

放在與 CountryRegion 群組關聯的資料列中時:

(CountryRegion 群組之行項目總計的總和)/(Geography 群組之行總計的總和) 的百分比。

這個值會使用文字方塊的預設顯示格式進行格式化,形式 #.#% 必須設定為 P1。

=Sum(Field!LineTotal.Value)/Sum(Field!LineTotal.Value,"Geography")

(目前範圍之行項目總計的總和)/(資料區域之行總計的總和) 的百分比。

這個值會使用 IIF 進行格式化,因此,如果目前群組中沒有行項目總計,結果則為空白。

=IIF(Sum(Field!LineTotal.Value)<=0,"", FormatPercent(Sum(Field!LineTotal.Value)/Sum(Field!LineTotal.Value,"Tablix1"),1)

(目前範圍之行項目總計的總和)/(資料集之行項目總計的總和) 的百分比。

這個值會使用 FormatPercent 指定一個小數位數來進行格式化。

="Percentage contributing to all sales: " & FormatPercent(Sum(Field!LineTotal.Value)/Sum(Field!LineTotal.Value,"Sales"),1)

在資料格中隱藏 Null 或零值

對於許多報表而言,群組範圍的計算可能會建立許多值為零 (0) 或 Null 的資料格。為減少報表中混亂的情形,加入一個運算式,以便在彙總值為 0 時,傳回空白。如需詳細資訊,請參閱<運算式範例 (Reporting Services)>中的<隱藏 Null 或零值的範例>。

變更記錄

更新的內容

已加入自訂彙總的連結。