真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

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

????現(xiàn)在好了,如果在報(bào)表工具中引入集算器,解決這個(gè)問(wèn)題就易如反掌了。下面我們就以 Birt 報(bào)表工具為例,講解一下實(shí)現(xiàn)的過(guò)程。對(duì)其它報(bào)表工具來(lái)說(shuō),也基本大同小異。

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

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

最后需要得到如下圖所示的目標(biāo)表樣:

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

?

我們直接來(lái)看集算器解決這個(gè)問(wèn)題的 SPL 代碼:


AB
1=connect("demo")
2=A1.query("select ? OrderID,Amount,OrderDate from salesall where OrderDate>=?? and OrderDate
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ù)庫(kù)

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

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

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

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

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

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

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

?

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

在 BIRT 中設(shè)計(jì)簡(jiǎn)單的 list 表如下:

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

?

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


分享名稱:Birt如何實(shí)現(xiàn)不規(guī)則月份統(tǒng)計(jì)
轉(zhuǎn)載注明:http://weahome.cn/article/iieocg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部