怎樣考察報(bào)表工具的開發(fā)效率?
示例 1:簡(jiǎn)單分組
根據(jù)如下數(shù)據(jù)表,制作報(bào)表
按銷售員、類別統(tǒng)計(jì)訂單數(shù)量,并增加合計(jì),結(jié)果報(bào)表:
制作過程數(shù)據(jù)集設(shè)置ds1: select * from orderlist報(bào)表模板設(shè)計(jì)
A2:=ds1.group(NAME;NAME:1),按照銷售員分組,可以手動(dòng)輸入公式,也可以報(bào)表設(shè)計(jì)器右下角選擇分組方式拖拽:
B1:=ds1.group(CATEGORY;CATEGORY:1),操作方式同 A2,設(shè)置擴(kuò)展方式為橫向B2:設(shè)計(jì)器右下角,選擇匯總,匯總方式選擇“計(jì)數(shù)”,拖拽任意字段到 B2 單元格B3、C2、C3:合計(jì)單元格,表達(dá)式手動(dòng)輸入:=sum(B2{})報(bào)表結(jié)果
對(duì)于這類簡(jiǎn)單報(bào)表,各工具效率上基本沒有什么差異,潤(rùn)乾報(bào)表是直接寫表達(dá)式(也可以拖拽),其他工具有寫表達(dá)式的,也有拖拽做的,都比較簡(jiǎn)單。有些工具的可視化的點(diǎn)擊操作做得更人性化,體驗(yàn)更好,更適合初級(jí)學(xué)習(xí)人員
示例 2:帶條件的分組
基于同一個(gè)數(shù)據(jù)表,我們改一下表樣,稍微增加一些難度,根據(jù)日期字段中的年來(lái)分組,看看不同產(chǎn)品的操作上有什么變化按照年度統(tǒng)計(jì)產(chǎn)品的平均售價(jià),單筆采購(gòu)數(shù)量不同、采購(gòu)時(shí)間不同,產(chǎn)品的單價(jià)可能不同,產(chǎn)品平均單價(jià) = 總金額 / 總數(shù)量結(jié)果表樣:
制作過程數(shù)據(jù)集設(shè)置ds1:SELECTORDERLIST.ORDER_DATE,ORDERLIST.PRODUCT,ORDERLIST.PRICE,ORDERLIST.AMOUNT FROM ORDERLIST報(bào)表模板設(shè)計(jì)
A2:=ds1.group(year(ORDER_DATE);ORDER_DATE:1)+“年”,取字段的年并分組B1:=ds1.group(PRODUCT;PRODUCT:1),按產(chǎn)品字段分組并設(shè)置橫向擴(kuò)展B2:=ds1.sum(PRICEAMOUNT)/ds1.sum(AMOUNT),先通過 PRICEAMOUNT 算出金額,再進(jìn)行匯總,然后除以總數(shù)量。難度稍微增加以后,潤(rùn)乾報(bào)表還是只要在單元格里寫簡(jiǎn)單的表達(dá)式就可以了,依舊簡(jiǎn)單。但有些工具不支持格子里自由寫公式和條件,只能在對(duì)話框里設(shè)置,結(jié)果就是拖拽完基礎(chǔ)表達(dá)式以后,還得打開對(duì)話框設(shè)置一下條件才可以,比如這個(gè)按年分組
從這個(gè)報(bào)表就已經(jīng)可以看出一些端倪了,ds1.group(year(ORDER_DATE);ORDER_DATE:1)+"年" 是寫一個(gè)這樣的表達(dá)式,還是每次都多點(diǎn)幾步對(duì)話框去設(shè)置,哪種方法的工作效率更高呢?只考察最簡(jiǎn)單的情況是看不出這些區(qū)別的
示例 3:再?gòu)?fù)雜一些的分組
還是基于這個(gè)數(shù)據(jù)表,我們做個(gè)一個(gè)格式再?gòu)?fù)雜一些的表樣按銷售人員統(tǒng)計(jì)優(yōu)質(zhì)訂單的情況,優(yōu)質(zhì)訂單指:回款日期在訂單日期 30 日內(nèi)且單筆訂單金額 >=10000
制作過程數(shù)據(jù)集設(shè)置ds1:select order_date,price,amount,name,re_date from orderlist where substr(order_date,0,4)=‘2012’報(bào)表模板設(shè)計(jì)
A3:=ds1.group(NAME;NAME:1),可以鼠標(biāo)拖拽,也可以手動(dòng)輸入B3:=ds1.count()C3:=ds1.count(price*amount>=10000 and interval(ORDER_DATE,RE_DATE)<=30)D3:=C3/B3,設(shè)置顯示格式為“#0.00%”E3:=ds1.sum(PRICE*amount)F3:=ds1.sum(PRICE*amount,price*amount>=10000 and interval(ORDER_DATE,RE_DATE)<=30),條件表達(dá)式和 C3 一樣,可以在 =ds1.sum(PRICE*amount) 基礎(chǔ)上,直接將條件表達(dá)式復(fù)制過來(lái)G3:將 D3 直接復(fù)制到 G3,單元格引用名稱自動(dòng)變化,顯示格式保留H3:=ds1.count(price*amount>=10000 and interval(ORDER_DATE,RE_DATE)<=30 and month(ORDER_DATE)>=10 and month(ORDER_DATE)<=12),在 C3 的基礎(chǔ)上增加季度判斷條件I3:=H3/B3,設(shè)置顯示格式為“#0.00%”J3:=ds1.sum(PRICE*amount,price*amount>=10000 and interval(ORDER_DATE,RE_DATE)<=30 and month(ORDER_DATE)>=10 and month(ORDER_DATE)<=12),在 E3 的基礎(chǔ)上,直接將 H3 的條件表達(dá)式復(fù)制過來(lái)K3:將 I3 直接復(fù)制到 K3,單元格引用名稱自動(dòng)變化,顯示格式保留到這個(gè)例子,是不是已經(jīng)感覺這些表達(dá)式寫起來(lái)也沒有多困難了,即使是初學(xué)者,也能輕易看懂并寫出來(lái)了,是的,有這樣的感覺就對(duì)了,對(duì)于搞計(jì)算機(jī)的同學(xué),這確實(shí)不難再來(lái)看看其他的一些只能通過對(duì)話框來(lái)設(shè)置條件的工具處理這樣的情況會(huì)怎樣
每增加一個(gè)條件,一個(gè) and,就得點(diǎn)一次增加,如果要修改,刪除,同樣得挨個(gè)去點(diǎn),每次設(shè)置還都得打開、關(guān)閉一次對(duì)話框如果每次都得這樣,估計(jì)初學(xué)者也不會(huì)覺得簡(jiǎn)單而是會(huì)感到麻煩了,更別說(shuō)熟練的老同學(xué)了這樣無(wú)端端多出了好多沒必要的操作,會(huì)浪費(fèi)很多的時(shí)間,減少很多產(chǎn)出懂了表達(dá)式以后,還是直接寫表達(dá)式更快更好,可視化操作看上去很美,但效率并不會(huì)高
小節(jié)
從上面三個(gè)報(bào)表我們可以看出,簡(jiǎn)單的表樣,可視化的對(duì)話框設(shè)置確實(shí)使用體驗(yàn)更好,但格式稍微變復(fù)雜一點(diǎn)以后,工程師已經(jīng)掌握表達(dá)式的書寫以后,如果仍然還得用對(duì)話框就顯得繁瑣了而且報(bào)表開發(fā)人員是技術(shù)工種,從初學(xué)者到熟手是輕而易舉的事情,是否快和方便,要從一個(gè)熟手的角度去衡量,而不是初學(xué)者,所以考察的時(shí)候千萬(wàn)不要掉到生手容易熟手繁瑣的操作陷阱中上面三個(gè)報(bào)表都是比較初級(jí)的報(bào)表,我們更多的是從簡(jiǎn)單的普通操作上來(lái)看開發(fā)的效率如何,但實(shí)際的項(xiàng)目中,報(bào)表常常遠(yuǎn)沒有這么簡(jiǎn)單,很多都會(huì)涉及較復(fù)雜的計(jì)算, 制作這些復(fù)雜的報(bào)表耗費(fèi)的時(shí)間會(huì)更多,也更需要注重效率,所以復(fù)雜計(jì)算報(bào)表的開發(fā)效率,也是我們考察的重點(diǎn)我們繼續(xù)用兩個(gè)示例來(lái)看下更復(fù)雜的報(bào)表的開發(fā)效率如何考察示例 4 側(cè)重于考察報(bào)表工具函數(shù)的功能,看一些復(fù)雜計(jì)算場(chǎng)景中,是否有對(duì)應(yīng)的高級(jí)函數(shù)來(lái)直接解決問題,示例 5 側(cè)重于考察工具處理一些復(fù)雜的多步、過程式計(jì)算的能力,看處理這些計(jì)算是否簡(jiǎn)單高效示例 4:找出進(jìn)步最快的 3 名同學(xué)
基于如下數(shù)據(jù)學(xué)生成績(jī)表:
進(jìn)行年度學(xué)生成績(jī)匯總,進(jìn)行班級(jí)班名以及和去年成績(jī)對(duì)比,找出進(jìn)步最快的三位同學(xué),形成如下結(jié)果:
要點(diǎn):看各工具怎么去做這個(gè)計(jì)算,看哪個(gè)更簡(jiǎn)單高效制作過程參數(shù)設(shè)置報(bào)表中增加參數(shù) nd,默認(rèn)值為 2019,用于接收年份數(shù)據(jù)集設(shè)置:ds1:SELECT bj,studentid,yuwen+shuxue+yingyu zf,nd FROM XSCJ where nd=?,問號(hào)對(duì)應(yīng)參數(shù)表達(dá)式:nd,用于對(duì)參數(shù)對(duì)應(yīng)年度數(shù)據(jù)ds2:SELECT bj,studentid,yuwen+shuxue+yingyu zf,nd FROM XSCJ where nd=?,問號(hào)對(duì)應(yīng)參數(shù)表達(dá)式:nd-1,取參數(shù)對(duì)應(yīng)上一年數(shù)據(jù)報(bào)表模板設(shè)計(jì):
A3、A4 單元格合并,按照班級(jí)分組,設(shè)置顯示值表達(dá)式:chn(int(value()))+“班”B3、B4 分別取出姓名、分?jǐn)?shù)字段D3:=count(C3[A3]{C3>$C3})+1,班級(jí)內(nèi)排名E3:=count(C3[`0]{C3>=$C3})+1,年級(jí)排名F3:=ds2.select(zf,bj==A3 && studentid==B3),從 ds2 數(shù)據(jù)集中取出去年成年,條件直接寫在 select 函數(shù)內(nèi)G3:=C3-F3,成績(jī)變化B4:=“班內(nèi)成績(jī)提升最快的三位同學(xué)是:”+string(esproc(“?.m(?.ptop(-3))”,B3{},G3{})),使用潤(rùn)乾內(nèi)置函數(shù) esproc,將 K3 單元格(名次變化幅度)傳入,ptop(-3) 取最大的 3 位的位置,然后用 m() 函數(shù)根據(jù)位置取對(duì)應(yīng)的姓名結(jié)果如下:
這個(gè)例子主要是測(cè)試報(bào)表工具的一些復(fù)雜計(jì)算能力,如果報(bào)表工具的模型中函數(shù)較為豐富且計(jì)算能力強(qiáng),比如潤(rùn)乾報(bào)表內(nèi)置了很多開源 SPL 計(jì)算工具的高級(jí)函數(shù),那處理起復(fù)雜計(jì)算來(lái)就會(huì)游刃有余如果函數(shù)計(jì)算功能不足,那就得通過多步計(jì)算,額外在報(bào)表中設(shè)置輔助計(jì)算格才可以完成,比如有些報(bào)表工具,需要像下面這樣用 H 列進(jìn)一步計(jì)算需要的數(shù)據(jù),然后再隱藏掉
這些額外輔助計(jì)算格,不僅增加了開發(fā)工作量,數(shù)據(jù)量大的時(shí)候,還會(huì)影響報(bào)表的性能其實(shí)這款報(bào)表已經(jīng)不錯(cuò),提供有層次坐標(biāo)之類的東西,用隱藏格還能做出來(lái),有些報(bào)表工具連這個(gè)都沒有,只能自己在外部寫代碼實(shí)現(xiàn)了,工作效率會(huì)大受影響
示例 5:找出指定時(shí)間內(nèi)的大客戶
從如下銷售數(shù)據(jù)中:
取出指定時(shí)段的大客戶。所謂大客戶,定義為銷售額占前一半的客戶,也就是把客戶銷售額從大到小排序后,前面若干個(gè)客戶的合計(jì)銷售額構(gòu)成總銷售的一半,這些客戶被稱為大客戶報(bào)表結(jié)果:
制作過程數(shù)據(jù)集設(shè)置潤(rùn)乾報(bào)表內(nèi)置了高效的開源計(jì)算工具 SPL,可以通過內(nèi)置的腳本更簡(jiǎn)單高效的計(jì)算這些復(fù)雜的多步計(jì)算,把計(jì)算結(jié)果當(dāng)做數(shù)據(jù)集直接供報(bào)表來(lái)使用,腳本如下:
A3:對(duì)銷售額進(jìn)行求和操作并處以 2,取出總金額的一半,用于判斷大客戶。B3 設(shè)置初始值為 0,用于做銷售額累加操作A4:對(duì)銷售額進(jìn)行累加,取出累加金額大于 A3 中對(duì)應(yīng)的 A2 的序號(hào)A5:根據(jù)序號(hào)取 A2 中對(duì)應(yīng)的值,并做為結(jié)果集返回給報(bào)表報(bào)表模板設(shè)計(jì)
報(bào)表結(jié)果
從這個(gè)例子可以看出,原本需要在報(bào)表中做大量計(jì)算才能做出的報(bào)表,經(jīng)過腳本準(zhǔn)備數(shù)據(jù)后,只需要在報(bào)表中直接取數(shù)就可以了如果沒有腳本,那就只能在報(bào)表中完成這樣的計(jì)算,寫起來(lái)麻煩,需要設(shè)置很多輔助格,同時(shí)增大了實(shí)現(xiàn)難度,對(duì)人員要求變高了很多(意味著成本上升),而且性能也遠(yuǎn)沒有腳本的好
本示例只是舉了一個(gè)很小的需要分步計(jì)算的例子,就已經(jīng)可以看出不同工具的設(shè)計(jì)效率了,一個(gè)簡(jiǎn)單易懂的腳本搞定,還是一堆輔助計(jì)算格 + 復(fù)雜的表達(dá)式來(lái)完成,開發(fā)效率差異是顯而易見的實(shí)際的項(xiàng)目中的復(fù)雜報(bào)表,對(duì)原始數(shù)據(jù)的處理和計(jì)算,遠(yuǎn)遠(yuǎn)要比本例復(fù)雜的多,如果有腳本功能,那可以用腳本來(lái)處理這些計(jì)算,不僅寫起來(lái)簡(jiǎn)單,算起來(lái)還快,如果沒有腳本功能,那就只能用成百上千行的復(fù)雜 SQL,存儲(chǔ)過程或者高級(jí)語(yǔ)言去寫了,那樣開發(fā)效率就更低了所以我們考察報(bào)表工具對(duì)于復(fù)雜報(bào)表的開發(fā)效率時(shí),可以看看自己的項(xiàng)目中有沒有需要寫復(fù)雜的 SQL、存儲(chǔ)過程或者更復(fù)雜的數(shù)據(jù)來(lái)源處理的報(bào)表,拿來(lái)找各工具測(cè)試驗(yàn)證下,看看它們的效率都如何
價(jià)格也是個(gè)重要因素
價(jià)格和考察開發(fā)效率也有關(guān)系嗎?還真有,考察開發(fā)效率的最終目的不就是為了節(jié)省時(shí)間和人工成本嗎?都是為了省成本,那價(jià)格上省出來(lái)的成本其實(shí)更直接。工具的購(gòu)買價(jià)格和開發(fā)效率要放在一起綜合考慮才能得到總體的成本比如大家可能都會(huì)想到使用不要錢的開源報(bào)表,購(gòu)買價(jià)格為 0,但開發(fā)效率太低(面對(duì)我國(guó)的復(fù)雜報(bào)表),結(jié)果總體成本卻不低。而商用報(bào)表工具雖然要花錢,但開發(fā)效率能提高很多,有可能總體成本會(huì)更低。當(dāng)然,價(jià)格很容易對(duì)比,只要?jiǎng)e忘了就行了總結(jié)
怎么考察報(bào)表的開發(fā)效率,相信大家看過上面的考察要點(diǎn)和示例以后,應(yīng)該都比較清楚了,其實(shí)并不難,那就是實(shí)際去用一用,看看一個(gè)熟練的工程師用起來(lái)繁瑣不繁瑣,測(cè)測(cè)項(xiàng)目上格式和計(jì)算復(fù)雜的報(bào)表各個(gè)工具做起來(lái)困難不困難,用過試過就找到答案了同時(shí),價(jià)錢也挺重要感興趣的小伙伴,請(qǐng)識(shí)別右側(cè)二維碼與我們聯(lián)系
微信號(hào)|RUNQIAN_RAQSOFT
評(píng)論
圖片
表情
