溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

報(bào)表如何實(shí)現(xiàn)特殊分組統(tǒng)計(jì)功能?

發(fā)布時(shí)間:2020-06-04 02:11:46 來源:網(wǎng)絡(luò) 閱讀:185 作者:raqsoft 欄目:大數(shù)據(jù)

報(bào)表工具一般都會提供按某個(gè)字段分組的表達(dá)式,如按自然月分組統(tǒng)計(jì),但有時(shí)候需要按不規(guī)則月份來分組,例如,某企業(yè)從 1 月 16 日開始實(shí)行某種特殊的價(jià)格策略或營銷活動(dòng),因此以后都想以每月 16 號為界來統(tǒng)計(jì)產(chǎn)品銷售情況。這里所謂不規(guī)則月份就是指: 如果起始時(shí)間是 2013-01-16,則將 2013-01-16 到 2013-02-15 作為一組,將 2013-02-16 到 2013-03-15 作為一組。有的情況是需要按數(shù)值區(qū)間統(tǒng)計(jì),比如:將訂單金額按照1000、2000、4000劃分為四個(gè)區(qū)間,每個(gè)區(qū)間一組訂單,統(tǒng)計(jì)各組訂單的總額。

這類特殊分組,SQL很難寫,報(bào)表工具也都無法應(yīng)對,只能是硬編碼的方式在外部實(shí)現(xiàn),然后通過每個(gè)報(bào)表工具專有的方式將外部實(shí)現(xiàn)整合起來。實(shí)現(xiàn)這類需求,一般就是根據(jù)分組條件循環(huán)添加到某個(gè)子集合中,還需在子集合中分別實(shí)現(xiàn)sum(),count(*),topN()等聚合動(dòng)作,代碼冗長,改動(dòng)和維護(hù)都很麻煩。其實(shí)這類需求使用報(bào)表工具+集算器的方式都很簡單,集算器代碼如下,

不規(guī)則月份統(tǒng)計(jì):


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

A7返回結(jié)果:

報(bào)表如何實(shí)現(xiàn)特殊分組統(tǒng)計(jì)功能?

集算器提供JDBC和ODBC接口,計(jì)算結(jié)果很容易被報(bào)表工具使用,代碼詳解及報(bào)表整合參見 集算器如何協(xié)助Birt實(shí)現(xiàn)不規(guī)則月份統(tǒng)計(jì) 。沒用報(bào)表工具的,可以直接在Java代碼中嵌入SPL腳本,使用方法參見 Java 如何調(diào)用 SPL 腳本? ??

數(shù)值區(qū)間分組:


A
1=sales=db.query("select * from ? sales")
2=byFac=["?<=1000","?>1000 ? && ?<=2000","?>2000 && ? ?<=4000","?>4000"]
3=sales.enum(byFac,AMOUNT)
4=A18.new(byFac(#):byFac,~.sum(AMOUNT):AMOUNT)

A4結(jié)果如下:

報(bào)表如何實(shí)現(xiàn)特殊分組統(tǒng)計(jì)功能?

詳解參見 SPL 簡化 SQL 案例詳解:固定分組

還有一些情況表面上看不出是需要分組,其實(shí)如果用分組的思路解決起來十分方便,比如,根據(jù)門禁出入情況匯總考勤,如何統(tǒng)計(jì)考勤記錄 ,這類有序分組運(yùn)算用SQL都不好寫,用集算器SPL腳本就很簡單。有關(guān)集算器安裝使用、獲得免費(fèi)授權(quán)和相關(guān)技術(shù)資料,參見如何使用集算器 。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI