![]() ![]() |
Total 類別是聚集函數的保存器。Total 類別包含許多用於聚集的函數。這些函數是 BIRT 對 JavaScript 的延伸, 它們可對一組列進行彙總。「BIRT 報告引擎」會在下面兩個階段中實作函數:
BIRT 會重新撰寫任何含有聚集的 Script,藉以建立修訂的 Script 來執行這兩個階段。唯一需要注意這個程序的時機是在對內含聚集的表示式進行除錯時。例如,若要在群組的標底中顯示一個值,而值是所有帳戶總計的百分比。下列陳述式會執行這個動作:
在前述範例中,Total.OVERALL 會使 BIRT 計算所有列的總計聚集,甚至是群組總計中的表示式。若要計算前述範例中的表示式,BIRT 會執行第一次作業來計算總計餘額,並執行第二次作業來計算每個帳戶的值。
Total 類別的一般規則如下:
所有的聚集都能容許使用兩個選用的引數,來指出過濾和分組:
過濾器引數提供了一個 Boolean 表示式,讓 BIRT 對每一列進行求值。在計算聚集時,BIRT 只會考慮符合過濾器的列。例如,報告可以將作用中客戶的信用限制加以彙總,來決定信用風險曝額上限。
表示式是在資料轉換階段中執行。它可以根據上述環境定義說明的定義,來存取列中的直欄、參數、使用者定義的函數和其他資源。例如:
當過濾器引數為空值、未定義或 Total.NO_FILTER 時,表示不提供任何過濾器。如果應用程式沒有提供過濾器,則過濾器的預設值是未定義。如果您提供群組引數,就必須提供空值或 Total.NO_FILTER,來指出不要進行過濾。
報告經常需要顯示現行分組層次的總計。比方說,假設報告是依照客戶、訂單,以及訂單中用來代表行項目的明細記錄來分組。每一個行項目都有單價和數量(如同下列聚集):
這個聚集會彙總現行群組的值。若將它放置在標底中,就會顯示該訂單的行項目彙總。若將它放置在客戶標底中,就會顯示該客戶的所有訂單的全部行項目彙總。此外,若將它放置在報告標底中,就會顯示所有客戶的全部行項目彙總。
然而,有時應用程式需要從不同的分組層次來存取總計。例如,您可能要知道某一份訂單的總計值佔客戶所有訂單的百分比。在此情況下,您必須存取群組的總計,而不是現行群組的總計。您可以利用分組引數來執行這個動作:
群組引數可以是下列其中一項:
下例範例說明這些群組引數的類型:
Total.sum( row["myCol"] null, null ); // 現行群組 Total.sum( row["myCol"], null, "Customer" ); // 依名稱 Total.sum( row["myCol"], null, "row[`custID']" ); // 依群組鍵 Total.sum( row["myCol"], null, 1 ); // 依群組索引 Total.sum( row["myCol"], null, "Overall" ); // 總計 Total.sum( row["myCol"], null, 0 ); // 總計
在使用分組引數時,您必須提供過濾器引數。如果不需要過濾器,請提供空值作為過濾器的值。群組索引並不會加上引號。它必須是數字。亦即,1 代表位於層次 1 的群組,而 "1" 代表指名為 "1" 的群組。
OVERALL
這個聚集函數會計算數學平均值。如果表示式的求值結果為數字,這個函數會傳回這些數字的平均值。如果表示式的求值結果為日期,這個函數會傳回平均日期。
Total.ave( expr [, filter [, group ]] )
這個函數會傳回給定表示式的平均值。如果沒有任何列可用,就傳回空值。
下列陳述式會傳回班級中的學生平均年齡:
若要傳回班級中的學生平均生日,請使用下列陳述式:
Total.median 聚集
Total.mode 聚集
Total.stdDev 聚集
這個函數會計算群組內的列數。
Total.count( [ filter [, group ]] )
這個範例會計算班級中的男學生和女學生的數目。它需要建立兩個資料項目。請將第一個設為:
將第二個設為:
Total.sum 聚集
這個函數會計算群組或資料集內的特殊值數目。 expr 引數可提供用來將這些值分組的表示式。表示式會參照一個資料列直欄。空值將會計算成特殊值。
Total.countDistinct ( expr [, filter [, group ]] )
群組或資料集內的特殊值數目。如果沒有任何列可用,則傳回零。
假設我們要知道一組學生所代表的不同國家數目。我們可以定義一個資料項目,讓它使用下列陳述式:
在這個陳述式中,row.Country 是一個直欄,其中包含學生的國家的名稱或代碼。假設有些列包含空值,就表示我們不知道學生的國家。請使用下列陳述式將這些列排除在計數之外:
Total.count 聚集
這個聚集函數會傳回資料集中第一個出現的值。這是在使用為「表格」或「清單」所定義的排序順序來提取列時,從資料集提取的第一個值。
Total.first( expr [, filter [, group ]] )
這個函數會傳回列序中第一個出現的值,如果資料集沒有包含任何列,則傳回空值。
假設報告會列出給定股票在一段期間內的交易。下列陳述式會顯示最早股票的時間:
Total.max 聚集
Total.min 聚集
這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否為最低的 n 個值的其中一個。
Total.isBottomN( expr, n, [, filter [, group ]] )
這個函數會傳回 true 或 false。若數值欄位中的值是在這個直欄中的所有值的後面 n 個中,這個函數會傳回 true。
假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isBottomN(expr, 2) 會測試 expr 所代表的欄位是否包含 1 或 2,亦即直欄中最小的兩個數字。
這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否在直欄中所有值的最低 n 個百分比中。
Total.isBottomNPercent( expr, n, [, filter [, group ]] )
這個函數會傳回 true 或 false。若欄位中的值是在這個直欄中的所有值的後面 n 個百分比中,這個函數會傳回 true。
假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isBottomNPercent(expr, 60) 會測試 expr 所代表的欄位是否包含 1、2 或 3,亦即直欄中百分之六十的最小數字。
這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否為最高的 n 個值的其中一個。
Total.isTopN( expr, n, [, filter [, group ]] )
這個函數會傳回 true 或 false。若數值欄位中的值是在這個直欄中的所有值的前面 n 個中,這個函數會傳回 true。
假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isTopN(expr, 2) 會測試 expr 所代表的欄位是否包含 4 或 5,亦即直欄中最高的兩個數字。
這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否在直欄中所有值的最高 n 個百分比中。
Total.isTopNPercent( expr, n, [, filter [, group ]] )
這個函數會傳回 true 或 false。若欄位中的值是在這個直欄中的所有值的前面 n 個百分比中,這個函數會傳回 true。
假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isTopNPercent(expr, 60) 會測試 expr 所代表的欄位是否包含 3、4 或 5,亦即直欄中百分之六十的最大數字。
這個函數會傳回資料集中最後一個出現的值。這是在使用為「表格」或「清單」所定義的排序順序來提取列時,從資料集提取的最後一個值。
Total.last( expr [, filter [, group ]] )
這個函數會傳回列序中最後一個出現的值,如果資料集沒有包含任何列,則傳回空值。
假設報告會列出給定股票在一段期間內的交易。下列陳述式會顯示最近賣掉股票的時間:
Total.first 聚集
Total.max 聚集
Total.min 聚集
這個函數會計算給定表示式的最大值。它會對每一列來執行表示式的求值,並且保留最大值。這個函數可以和數字、日期或字串一起使用。
Total.max( expr [, filter [, group ]] )
這個函數會傳回給定表示式的最大值。如果沒有任何列可用,則傳回空值。
下列陳述式會尋找班級中年紀最大的學生:
Total.first 聚集
Total.min 聚集
這個聚集函數會計算數學中位數值。有一半的值會在中位數之上,另一半則在中位數之下。
Total.median( expr [, filter [, group ]] )
這個函數會傳回給定表示式的中位數值。如果沒有任何列可用,就傳回空值。
下列陳述式會傳回班級中的學生年齡中位數值:
此外,若要傳回班級中的學生的生日中位數值,請使用下列陳述式:
Total.ave 聚集
Total.mode 聚集
Total.stdDev 聚集
這個聚集函數會計算給定表示式的最小值。它會對每一列來執行表示式的求值,並且保留最小值。這個函數可以任何簡易類型的資料一起使用:數字、日期或字串。
Total.min( expr [, filter [, group ]] )
這個函數會傳回給定表示式的最小值。如果沒有任何列可用,就傳回空值。
下列陳述式會傳回班級中最年輕的學生的年齡:
Total.first 聚集
Total.max 聚集
這個聚集函數會計算數學模式值。模式是資料中最常發生的值。例如,在 {1, 2, 3, 2, 4, 7} 這個序列中,2 是模式, 因為它出現了兩次,而其他數字只出現一次。如果資料集有多個模式(例如在序列 {1,2,3,2,3} 中),則模式聚集會傳回空值。
Total.mode( expr [, filter [, group ]] )
這個函數會傳回給定表示式的模式值。如果沒有任何列可用,或者資料有一個以上的模式,就傳回空值。
下列陳述式會傳回班級中的學生最多人相同的年齡:
Total.ave 聚集
Total.median 聚集
Total.stdDev 聚集
這個聚集函數會計算移動平均數。expr 引數會提供要平均的值,而 window 引數則提供要考量的列數。在求取列的平均值時,會依照環境定義來決定次序,通常是依照「清單」或「表格」元素的排序所指定的順序。
Total.movingAve( expr, window [, filter [, group ]] )
這個函數會傳回給定表示式的移動平均數。如果沒有任何列可用,就傳回空值。
假設報告會列出股票每天的價格。若要顯示該股票在前五天的移動平均數,請使用下列陳述式:
Total.ave 聚集
Total.median 聚集
Total.mode 聚集
Total.stdDev 聚集
這個函數會檢查一組值,並傳回在值集的所有值中,屬於指定百分位數的值。比方說,您可能要知道在考試的所有分數中,哪一個分數是第 90 個百分位數。
這個函數會傳回在已分析的一組值中,位於指定百分位數的值。
下列陳述式會傳回位於第 50 個百分位數的分數值:
如果在指定直欄中的一組考試分數是 10、20、30、40 和 50,那麼這個陳述式會傳回 30。
這個函數會計算指定欄位中的值的排行百分比。
percentRank( expr, filter [, group ]] )
這個函數會傳回在指定欄位中的值的排行百分比。 回覆值的範圍是介於零和一之間。
下列陳述式會傳回在直欄中的所有分數之間,某個分數的排行百分比:
如果求值範圍中的分數是 10、10、20 和 50,而含有這個陳述式的 Cell 中的分數是 30,則回覆值是 .5,因為有一半的值是高於 20,另一半是低於 20。
這個函數會計算 t。
percentSum( expr [, filter [, group ]] )
這個函數會傳回在範圍中的所有值的彙總中,這個值所佔的百分比。
下列陳述式會傳回在所有訂單金額的彙總中,這份訂單所佔的百分比:
這個函數會計算在一組已定義的值中,值集的 0%、25%、50%、75% 或 100% 裡,哪些值是較大的。
quartile( expr, quartile, [, filter [, group ]] )
這個函數會傳回在指定的值集中,落在指定四分位數內的值。
下列陳述式會傳回大於 75% 以及小於 25% 的訂單金額:
這個函數會計算值在值集中的排行。排行值的範圍是介於 1 和值集中的值數目之間。如果有兩個值完全相同,就會有相同的排行。
rank( expr [, filter [, group ]] )
這個函數會傳回一個整數來反映值的排行,這個整數的範圍是介於 1 和值集中的項目數之間
下列陳述式會傳回在 OrderAmt 直欄中,OrderAmt 欄位在所有訂單金額中的排行。
這個函數會計算連續的列數。
runningCount( filter [, group ]] )
這個函數會傳回連續的列數。
下列陳述式會傳回報告的連續計數:
Total.count 聚集
這個聚集函數會計算數字序列的統計標準偏差。標準偏差是用來測量值集的散佈。
Total.stdDev( expr [, filter [, group ]] )
這個函數會傳回給定表示式的標準偏差。如果沒有任何列可用,就傳回空值。
Total.ave 聚集
Total.median 聚集
Total.mode 聚集
這個聚集函數會計算將群組中每一列的值加總所產生的彙總。在計算每一列的值時,是利用 expr 引數中所提供的表示式。彙總的取得方式是將所有的值相加在一起。
Total.sum( expr [, filter [, group ]] )
給定表示式的彙總。如果沒有任何列可用,則傳回零。
下列陳述式會將客戶的訂單金額加總:
Total.count 聚集
這個聚集函數會計算數字序列的統計變異。變異是用來測量值集的散佈。
Total.variance( expr [, filter [, group ]] )
這個函數會傳回給定表示式的變異。如果沒有任何列可用,就傳回空值。
Total.ave 聚集
Total.median 聚集
Total.mode 聚集
Total.stdDev 聚集
這個聚集函數會計算數學加權平均值。如果對 expr 或 weight 引數的求值結果是空值,就會將列排除在平均值外。
Total.weightedAve( expr, weight [, filter [, group ]] )
這個函數會傳回給定表示式的加權平均值。如果沒有任何列可用,就傳回空值。
假設有一個金融應用程式可以追蹤在不同時期購買的給定股票批次。每一個批次都有不同的購買價,以及以該價格購入的股份數目。下列陳述式會計算加權平均購買價:
Total.ave 聚集
Total.median 聚集
Total.mode 聚集
Total.stdDev 聚集
![]() ![]() |