欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Birt如何實現(xiàn)不規(guī)則月份統(tǒng)計

集算器實現(xiàn) Birt 等報表工具中不規(guī)則月份統(tǒng)計

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)招遠免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

????業(yè)務報表中,常常需要基于時間段進行分組統(tǒng)計,特別是按月份分組統(tǒng)計。一般情況如果按自然月就簡單了,但有時候也會需要按不規(guī)則月份來分組。例如,某企業(yè)從 1 月 16 日開始實行某種特殊的價格策略或營銷活動,因此以后都想以每月 16 號為界來統(tǒng)計產(chǎn)品銷售情況。這里所謂不規(guī)則月份就是指: 如果起始時間是 2013-01-16,則將 2013-01-16 到 2013-02-15 作為一組,將 2013-02-16 到 2013-03-15 作為一組。更特別的,如果起始時間是 2013-01-31,則可能要求將 2013-01-31 到 2013-02-27 作為一組,而將 2013-02-28 到 2013-03-30 作為一組,也就是“從每月最后一天”開始分組。

????怎么樣?小伙伴們是不是有點傻眼了?對于 Birt 等報表工具,一般都會提供按自然月分組的表達式,但也卻都難以應對這種不規(guī)則月份分組的表達式。如果要解決這個問題,往往需要編寫程序?qū)崿F(xiàn)自定義報表數(shù)據(jù)集,而在程序中按這種規(guī)則進行分組,不但編程工作量不小,更重要的是基本無法通用。

????現(xiàn)在好了,如果在報表工具中引入集算器,解決這個問題就易如反掌了。下面我們就以 Birt 報表工具為例,講解一下實現(xiàn)的過程。對其它報表工具來說,也基本大同小異。

????在本例中,要統(tǒng)計企業(yè)從 2013-01-16 日開始到 2013-08-15 結(jié)束,每個月的銷售總額。數(shù)據(jù)表 salesall 中原始數(shù)據(jù)如下:

Birt 如何實現(xiàn)不規(guī)則月份統(tǒng)計

最后需要得到如下圖所示的目標表樣:

Birt 如何實現(xiàn)不規(guī)則月份統(tǒng)計

?

我們直接來看集算器解決這個問題的 SPL 代碼:


AB
1=connect("demo")
2=A1.query("select ? OrderID,Amount,OrderDate from salesall where OrderDate>=?? and OrderDate<? order by ? OrderDate",startDate,endDate)
3=interval@m(startDate,endDate)=startDate|A3.(elapse@m(startDate,~))
4=A2.group(B3.pseg(OrderDate);round(~.sum(Amount),2),B3(#))
5=A4.new(#:Number,#2:TotalAmount,#3:StartDate)
6>A1.close()
7return A5

A1?? 連接數(shù)據(jù)庫

A2?? 從數(shù)據(jù)庫訂單表中查出統(tǒng)計開始日期到結(jié)束日期之間的訂單數(shù)據(jù),startDate 和 endDate 是日期參數(shù)。

A3?? 根據(jù)起止時間算出月份間隔,比如 2013-01-16 和 2013-08-15 間隔 7 個月。

B3?? 根據(jù)起始時間和日期間隔算出不規(guī)則月份的開始日期,并將起始時間插入第 1 位。“|”表示合并,“~”表示集合中的當前成員,即數(shù)字 1 到 7,結(jié)合不同的選項,elapse 函數(shù)可以正確計算各種不規(guī)則月份的情況。

A4?? 按 B3 區(qū)間對 A2 分組,統(tǒng)計出不規(guī)則月份的銷售額,保留兩位小數(shù),并將 B3 作為最后一列。函數(shù) pseg 可返回參數(shù),也就是訂購日期所在的區(qū)間號。~.sum(Amount)中的~表示分組后的當前組。# 表示 A2 當前組號。

A5?? 取出 A4 的組號作為 Number,第 2 列為 TotalAmount,第 3 列為分組的 StartDate,生成新的結(jié)果序表。

A6?? 關(guān)閉數(shù)據(jù)庫

A7?? 將 A5 作為數(shù)據(jù)集返回給報表工具。

?

將集算器 SPL 代碼存為 orders.dfx 文件,然后引入到 Birt 報表中。如何引入請參看乾學院文章《BIRT 調(diào)用 SPL 腳本》。

在 BIRT 中設(shè)計簡單的 list 表如下:

Birt 如何實現(xiàn)不規(guī)則月份統(tǒng)計

?

報表調(diào)用集算器的方法和調(diào)用存儲過程完全一樣,比如在 BIRT 的存儲過程數(shù)據(jù)集中可以用 call orders(?,?) 來調(diào)用。輸入開始日期參數(shù) 2013-01-16、結(jié)束日期參數(shù) 2013-08-15 后,預覽報表就可以看到要求的目標表樣了。

文章題目:Birt如何實現(xiàn)不規(guī)則月份統(tǒng)計
文章位置:http://www.chinadenli.net/article26/iieocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站外貿(mào)網(wǎng)站建設(shè)網(wǎng)站建設(shè)外貿(mào)建站軟件開發(fā)網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)