前一主題下一主題


Total 類別

Total 類別是聚集函數的保存器。Total 類別包含許多用於聚集的函數。這些函數是 BIRT 對 JavaScript 的延伸, 它們可對一組列進行彙總。「BIRT 報告引擎」會在下面兩個階段中實作函數:

BIRT 會重新撰寫任何含有聚集的 Script,藉以建立修訂的 Script 來執行這兩個階段。唯一需要注意這個程序的時機是在對內含聚集的表示式進行除錯時。例如,若要在群組的標底中顯示一個值,而值是所有帳戶總計的百分比。下列陳述式會執行這個動作:

(balance / Total.sum( balance, Total.OVERALL ) ) * 100.0 

在前述範例中,Total.OVERALL 會使 BIRT 計算所有列的總計聚集,甚至是群組總計中的表示式。若要計算前述範例中的表示式,BIRT 會執行第一次作業來計算總計餘額,並執行第二次作業來計算每個帳戶的值。

Total 類別的一般規則如下:

關於分組和過濾

所有的聚集都能容許使用兩個選用的引數,來指出過濾和分組:

Total.<aggregate function> ( ..., filter, group ) 

關於過濾器引數

過濾器引數提供了一個 Boolean 表示式,讓 BIRT 對每一列進行求值。在計算聚集時,BIRT 只會考慮符合過濾器的列。例如,報告可以將作用中客戶的信用限制加以彙總,來決定信用風險曝額上限。

表示式是在資料轉換階段中執行。它可以根據上述環境定義說明的定義,來存取列中的直欄、參數、使用者定義的函數和其他資源。例如:

Total.sum( row["CreditLimit"], row["Active"] == 'Y' ); 

當過濾器引數為空值、未定義或 Total.NO_FILTER 時,表示不提供任何過濾器。如果應用程式沒有提供過濾器,則過濾器的預設值是未定義。如果您提供群組引數,就必須提供空值或 Total.NO_FILTER,來指出不要進行過濾。

關於群組引數

報告經常需要顯示現行分組層次的總計。比方說,假設報告是依照客戶、訂單,以及訂單中用來代表行項目的明細記錄來分組。每一個行項目都有單價和數量(如同下列聚集):

Total.sum( row["price"] * row["quantity"] ) 

這個聚集會彙總現行群組的值。若將它放置在標底中,就會顯示該訂單的行項目彙總。若將它放置在客戶標底中,就會顯示該客戶的所有訂單的全部行項目彙總。此外,若將它放置在報告標底中,就會顯示所有客戶的全部行項目彙總。

然而,有時應用程式需要從不同的分組層次來存取總計。例如,您可能要知道某一份訂單的總計值佔客戶所有訂單的百分比。在此情況下,您必須存取群組的總計,而不是現行群組的總計。您可以利用分組引數來執行這個動作:

Total.sum( row.CreditLimit, null, "Customer" ); 

群組引數可以是下列其中一項:

下例範例說明這些群組引數的類型:

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

這個聚集函數會計算數學平均值。如果表示式的求值結果為數字,這個函數會傳回這些數字的平均值。如果表示式的求值結果為日期,這個函數會傳回平均日期。

語法

Total.ave( expr [, filter [, group ]] )

引數

Returns

這個函數會傳回給定表示式的平均值。如果沒有任何列可用,就傳回空值。

範例

下列陳述式會傳回班級中的學生平均年齡:

Total.ave( row.Age ) 

若要傳回班級中的學生平均生日,請使用下列陳述式:

Total.ave( row.BirthDate ) 

另請參閱

Total.median 聚集

Total.mode 聚集

Total.movingAve 聚集

Total.stdDev 聚集

Total.variance 聚集

Total.weightedAve 聚集

Total.count

這個函數會計算群組內的列數。

語法

Total.count( [ filter [, group ]] )

引數

範例

這個範例會計算班級中的男學生和女學生的數目。它需要建立兩個資料項目。請將第一個設為:

Total.sum( row.sex == 'M' ); 

將第二個設為:

Total.sum( row.sex == 'F' ); 

另請參閱

Total.countDistinct 聚集

Total.sum 聚集

Total.countDistinct

這個函數會計算群組或資料集內的特殊值數目。 expr 引數可提供用來將這些值分組的表示式。表示式會參照一個資料列直欄。空值將會計算成特殊值。

語法

Total.countDistinct ( expr [, filter [, group ]] )

引數

傳回

群組或資料集內的特殊值數目。如果沒有任何列可用,則傳回零。

範例

假設我們要知道一組學生所代表的不同國家數目。我們可以定義一個資料項目,讓它使用下列陳述式:

Total.countDistinct( row.Country ) 

在這個陳述式中,row.Country 是一個直欄,其中包含學生的國家的名稱或代碼。假設有些列包含空值,就表示我們不知道學生的國家。請使用下列陳述式將這些列排除在計數之外:

Total.countDistinct( row.Country, row.Country != null ) 

另請參閱

Total.count 聚集

Total.first

這個聚集函數會傳回資料集中第一個出現的值。這是在使用為「表格」或「清單」所定義的排序順序來提取列時,從資料集提取的第一個值。

語法

Total.first( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回列序中第一個出現的值,如果資料集沒有包含任何列,則傳回空值。

範例

假設報告會列出給定股票在一段期間內的交易。下列陳述式會顯示最早股票的時間:

Total.first( row.TransDate, row.Action == 'Buy' ); 

另請參閱

Total.isBottomNPercent 聚集

Total.max 聚集

Total.min 聚集

Total.isBottomN

這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否為最低的 n 個值的其中一個。

語法

Total.isBottomN( expr, n, [, filter [, group ]] )

引數

傳回

這個函數會傳回 true 或 false。若數值欄位中的值是在這個直欄中的所有值的後面 n 個中,這個函數會傳回 true。

範例

假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isBottomN(expr, 2) 會測試 expr 所代表的欄位是否包含 1 或 2,亦即直欄中最小的兩個數字。

另請參閱

Total.isBottomNPercent

Total.isTopN

Total.isTopNPercent

Total.isBottomNPercent

這個函數會傳回一個 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,亦即直欄中百分之六十的最小數字。

另請參閱

Total.isBottomN

Total.isTopN

Total.isTopNPercent

Total.isTopN

這個函數會傳回一個 Boolean,指出指定的數值欄位的值是否為最高的 n 個值的其中一個。

語法

Total.isTopN( expr, n, [, filter [, group ]] )

引數

傳回

這個函數會傳回 true 或 false。若數值欄位中的值是在這個直欄中的所有值的前面 n 個中,這個函數會傳回 true。

範例

假設報告直欄有五個列,其中包含 1、2、3、4 和 5 這些值。Total.isTopN(expr, 2) 會測試 expr 所代表的欄位是否包含 4 或 5,亦即直欄中最高的兩個數字。

另請參閱

Total.isTopNPercent

Total.isBottomN

Total.isBottomNPercent

Total.isTopNPercent

這個函數會傳回一個 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.isTopN

Total.isBottomN

Total.isBottomNPercent

Total.last

這個函數會傳回資料集中最後一個出現的值。這是在使用為「表格」或「清單」所定義的排序順序來提取列時,從資料集提取的最後一個值。

語法

Total.last( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回列序中最後一個出現的值,如果資料集沒有包含任何列,則傳回空值。

範例

假設報告會列出給定股票在一段期間內的交易。下列陳述式會顯示最近賣掉股票的時間:

Total.last( row.TransDate, row.Action == 'Sell' ); 

另請參閱

Total.first 聚集

Total.max 聚集

Total.min 聚集

Total.max

這個函數會計算給定表示式的最大值。它會對每一列來執行表示式的求值,並且保留最大值。這個函數可以和數字、日期或字串一起使用。

語法

Total.max( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的最大值。如果沒有任何列可用,則傳回空值。

範例

下列陳述式會尋找班級中年紀最大的學生:

Total.max( row.Age ) 

另請參閱

Total.first 聚集

Total.isBottomNPercent 聚集

Total.min 聚集

Total.median

這個聚集函數會計算數學中位數值。有一半的值會在中位數之上,另一半則在中位數之下。

語法

Total.median( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的中位數值。如果沒有任何列可用,就傳回空值。

範例

下列陳述式會傳回班級中的學生年齡中位數值:

Total.median( row.Age ) 

此外,若要傳回班級中的學生的生日中位數值,請使用下列陳述式:

Total.median( row.BirthDate ) 

另請參閱

Total.ave 聚集

Total.mode 聚集

Total.movingAve 聚集

Total.stdDev 聚集

Total.variance 聚集

Total.weightedAve 聚集

Total.min

這個聚集函數會計算給定表示式的最小值。它會對每一列來執行表示式的求值,並且保留最小值。這個函數可以任何簡易類型的資料一起使用:數字、日期或字串。

語法

Total.min( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的最小值。如果沒有任何列可用,就傳回空值。

範例

下列陳述式會傳回班級中最年輕的學生的年齡:

Total.min( row.Age ) 

另請參閱

Total.first 聚集

Total.isBottomNPercent 聚集

Total.max 聚集

Total.mode

這個聚集函數會計算數學模式值。模式是資料中最常發生的值。例如,在 {1, 2, 3, 2, 4, 7} 這個序列中,2 是模式, 因為它出現了兩次,而其他數字只出現一次。如果資料集有多個模式(例如在序列 {1,2,3,2,3} 中),則模式聚集會傳回空值。

語法

Total.mode( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的模式值。如果沒有任何列可用,或者資料有一個以上的模式,就傳回空值。

範例

下列陳述式會傳回班級中的學生最多人相同的年齡:

Total.mode( row.Age ) 

另請參閱

Total.ave 聚集

Total.median 聚集

Total.movingAve 聚集

Total.stdDev 聚集

Total.variance 聚集

Total.weightedAve 聚集

Total.movingAve

這個聚集函數會計算移動平均數。expr 引數會提供要平均的值,而 window 引數則提供要考量的列數。在求取列的平均值時,會依照環境定義來決定次序,通常是依照「清單」或「表格」元素的排序所指定的順序。

語法

Total.movingAve( expr, window [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的移動平均數。如果沒有任何列可用,就傳回空值。

範例

假設報告會列出股票每天的價格。若要顯示該股票在前五天的移動平均數,請使用下列陳述式:

Total.movingAve( row.price, 5 ); 

另請參閱

Total.ave 聚集

Total.median 聚集

Total.mode 聚集

Total.stdDev 聚集

Total.variance 聚集

Total.weightedAve 聚集

Total.percentile

這個函數會檢查一組值,並傳回在值集的所有值中,屬於指定百分位數的值。比方說,您可能要知道在考試的所有分數中,哪一個分數是第 90 個百分位數。

語法

引數

傳回

這個函數會傳回在已分析的一組值中,位於指定百分位數的值。

範例

下列陳述式會傳回位於第 50 個百分位數的分數值:

Total.percentile( row.TestScore, 0.5) 

如果在指定直欄中的一組考試分數是 10、20、30、40 和 50,那麼這個陳述式會傳回 30。

另請參閱

Total.percentRank

Total.percentSum

Total.quartile

Total.percentRank

這個函數會計算指定欄位中的值的排行百分比。

語法

percentRank( expr, filter [, group ]] )

引數

傳回

這個函數會傳回在指定欄位中的值的排行百分比。 回覆值的範圍是介於零和一之間。

範例

下列陳述式會傳回在直欄中的所有分數之間,某個分數的排行百分比:

Total.percentRank( row.Scores ) 

如果求值範圍中的分數是 10、10、20 和 50,而含有這個陳述式的 Cell 中的分數是 30,則回覆值是 .5,因為有一半的值是高於 20,另一半是低於 20。

另請參閱

Total.percentile

Total.percentSum

Total.quartile

Total.percentSum

這個函數會計算 t。

語法

percentSum( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回在範圍中的所有值的彙總中,這個值所佔的百分比。

範例

下列陳述式會傳回在所有訂單金額的彙總中,這份訂單所佔的百分比:

Total.percentSum( row.OrderAmt ) 

另請參閱

Total.percentile

Total.percentRank

Total.quartile

Total.quartile

這個函數會計算在一組已定義的值中,值集的 0%、25%、50%、75% 或 100% 裡,哪些值是較大的。

語法

quartile( expr, quartile, [, filter [, group ]] )

引數

傳回

這個函數會傳回在指定的值集中,落在指定四分位數內的值。

範例

下列陳述式會傳回大於 75% 以及小於 25% 的訂單金額:

Total.quartile( row.OrderAmt, 3) 

另請參閱

Total.percentile

Total.percentRank

Total.percentSum

Total.rank

這個函數會計算值在值集中的排行。排行值的範圍是介於 1 和值集中的值數目之間。如果有兩個值完全相同,就會有相同的排行。

語法

rank( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回一個整數來反映值的排行,這個整數的範圍是介於 1 和值集中的項目數之間

範例

下列陳述式會傳回在 OrderAmt 直欄中,OrderAmt 欄位在所有訂單金額中的排行。

Total.rank( row.OrderAmt ) 

另請參閱

Total.percentRank

Total.runningCount

這個函數會計算連續的列數。

語法

runningCount( filter [, group ]] )

引數

傳回

這個函數會傳回連續的列數。

範例

下列陳述式會傳回報告的連續計數:

Total.runningCount( ) 

另請參閱

Total.count 聚集

Total.percentRank 聚集

Total.stdDev

這個聚集函數會計算數字序列的統計標準偏差。標準偏差是用來測量值集的散佈。

語法

Total.stdDev( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的標準偏差。如果沒有任何列可用,就傳回空值。

另請參閱

Total.ave 聚集

Total.median 聚集

Total.mode 聚集

Total.movingAve 聚集

Total.variance 聚集

Total.weightedAve 聚集

Total.sum

這個聚集函數會計算將群組中每一列的值加總所產生的彙總。在計算每一列的值時,是利用 expr 引數中所提供的表示式。彙總的取得方式是將所有的值相加在一起。

語法

Total.sum( expr [, filter [, group ]] )

引數

傳回

給定表示式的彙總。如果沒有任何列可用,則傳回零。

範例

下列陳述式會將客戶的訂單金額加總:

Total.sum( row.OrderAmt ) 

另請參閱

Total.count 聚集

Total.percentRank 聚集

Total.variance

這個聚集函數會計算數字序列的統計變異。變異是用來測量值集的散佈。

語法

Total.variance( expr [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的變異。如果沒有任何列可用,就傳回空值。

另請參閱

Total.ave 聚集

Total.median 聚集

Total.mode 聚集

Total.movingAve 聚集

Total.stdDev 聚集

Total.weightedAve 聚集

Total.weightedAve

這個聚集函數會計算數學加權平均值。如果對 expr 或 weight 引數的求值結果是空值,就會將列排除在平均值外。

語法

Total.weightedAve( expr, weight [, filter [, group ]] )

引數

傳回

這個函數會傳回給定表示式的加權平均值。如果沒有任何列可用,就傳回空值。

範例

假設有一個金融應用程式可以追蹤在不同時期購買的給定股票批次。每一個批次都有不同的購買價,以及以該價格購入的股份數目。下列陳述式會計算加權平均購買價:

Total.weightedAve( row.purchasePrice, row.shareCount ) 

另請參閱

Total.ave 聚集

Total.median 聚集

Total.mode 聚集

Total.movingAve 聚集

Total.stdDev 聚集

Total.variance 聚集


(c) Copyright Actuate Corporation 2006

前一主題下一主題