天天看點

按段分組報表制作

需求說明

在報表對資料進行彙總統計時,通常是按照某個字段進行分組,比如按地區、類别等字段分組後對其他資訊進行彙總,但有一種分組模式為不規則分組,其分組是根據資料的值段來分的,例如按照分數段、年齡段、按時間段等,屬于某個值區間的記錄歸到一個組裡如下圖所示:

按段分組報表制作

在上圖中我們可以看到,報表根據訂購日期将訂單數量和訂單金額分成四組,分别統計 "2012 年聖誕前"、“2012 年聖誕–2013 年國慶”、“2013 年國慶–2014 年五一”、"2014 年五一以後" 四個時間段的訂單。

這種按值段進行分組的分組報表被稱為按段分組,下面我們介紹一下潤乾報表中如何實作該報表。

定義資料集

ds1:SELECT 訂單. 訂購日期, 訂單明細. 數量, 訂單明細. 單價, 訂單明細. 折扣, 客戶. 地區 FROM 訂單明細, 訂單, 客戶 WHERE 客戶. 客戶 ID = 訂單. 客戶 ID AND 訂單. 訂單 ID = 訂單明細. 訂單

增加參數

報表中按時間段進行分組,實際應用中時間段通常是動态變化的,動态變化的時間段可以通過參數動态控制,是以此處增加參數進行控制:

參數名:arg1,資料類型:日期組,值表達式:2012 -12 -25, 2013 -10 -1, 2014 -5-1

參數名:arg2,資料類型:字元串組,值表達式:2012 年聖誕前, 2012 年聖誕–2013 年國慶, 2013 年國慶–2014 年五一, 2014 年五一以後

arg1 參數用于控制按段分組時的日期段,arg2 用于設定報表展示時單元格的顯示資訊,稍後做詳細介紹

制作報表

報表設計模闆如圖:

按段分組報表制作

A3:=ds1.group(地區; 地區:1),按照地區進行分組

B3:=ds1.count(),進行計數操作,統計訂單數量

C3:=ds1.sum( 單價數量 ),對訂單金額彙總,注意,資料庫中并沒有訂單金額字段,訂單金額可通過單價數量計算出,潤乾中支援 sum 前先對字段進行相應操作,并設定 C3 單元格顯示格式為:¥#0.00

B1:表達式為 =ds1.plot(訂購日期, arg1),此處使用資料集的 plot 函數(按段分組),第一個參數(訂購日期)為要分組字段,第二個參數(arg1)為分段區間,函數主要功能是根據訂購日期字段将資料集按照 arg1 參數指定的分段區間劃分到不同的組内,該函數傳回值為整數組,代表記錄按值段分組後組的順序,如 list(0,1,2,3) 代表第一組,第二組,第三組,第四組,具體函數說明見附注,将單元格擴充方向改成橫向,此時報表預覽展示效果如下:

按段分組報表制作

可以看到,B1 單元格傳回的是 0,1,2,3 這種整數,是以要對其設定顯示值表達式以達到顯示效果,這裡就用到了之前定義的 arg2 參數,在 B1 單元格顯示值表達式中寫入:map(to(0,count(arg1)),arg2),map 函數主要用于顯示值表達式映射,該函數有兩個參數均為 list,由于 B1 單元格的真實值為 0,1,2 這種整數,是以 map 函數第一個參數為 0 到分段區間個數的擴充,第二個參數會按照順序映射傳回到顯示值屬性中,這樣 B1 單元格就能按照 arg2 參數中設定好的内容進行顯示。而分段區間和顯示值均是通過參數傳遞,是以此報表的分段資訊可以通過程式控制參數達到動态效果。

根據實際要求設定報表樣式,最終效果如下:

按段分組報表制作

附注:

plot 函數說明:

根據資料值段進行分組,俗稱“按段分組”

文法:

datasetName.plot(valueExp,listExp{,filterExp})

參數:

valueExp 用于分組的值表達式

listExp 資料值段清單,同 valueExp 資料類型相同的數組,要求其中元素從小到大排列

filterExp 過濾表達式

傳回值:

整數組,代表記錄按值段分組後組的順序,如 list(0,1,2,3) 代表第一組,第二組,第三組,第四組。是以,定義完單元格資料值表達式後還需要定義顯示值表達式,比如第一組代表不及格,第二組代表及格等等

選項:

@r 是否為根資料集表達式

@c 表示與元素比較時資料值段臨界值隻包含在第 1 個碰到的區間,相同的臨界值不包含在第 2 個碰到的區間。預設資料值段臨界值隻包含在第 2 個碰到的區間。

@z 表示 listExp 傳回的數組按從大到小排列; 預設為從小到大排列

示例:

例 1:ds1.plot(成績,list(60,80,90) ,科目 ==“數學”)

傳回值為 list(0,1,2,3) 對資料集 ds1 過濾出科目等于數學的記錄按成績段進行分組,60 分以下不包含 60 分、60-79,80-89,90 分及 90 分以上等四組。同時定義顯示值表達式為:map(list(0,1,2,3),list(不及格, 及格, 良好, 優秀))

例 2:ds1.plot@c(成績,arg1)

其中 arg1 為參數,其資料類型是整數組,其值為 "60,70,80,90" 。顯示值表達式為:map(to(0,count(arg1)),arg2),其中 arg2 為字元串組,其值為 {“不及格”,“及格”,“中”,“良好”,“優秀”}。 本例通過參數動态控制分組值段以及結果組的顯示值。

作者:gxy

連結:

http://c.raqsoft.com.cn/article/1542609796494?r=IBelieve

來源:乾學院

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。