自定义报表 java_报表为什么会没完没了?怎么解决这个问题?
可以先想一下自己的部門或項(xiàng)目組是否面臨這些問(wèn)題:
1. 投入很多技術(shù)力量做報(bào)表,卻還是疲于應(yīng)付
2. 用了高端報(bào)表工具和敏捷 BI,卻還是不夠用
3. 技術(shù)高手用來(lái)做報(bào)表,感覺(jué)很浪費(fèi)
4. 對(duì)于頻繁多變的報(bào)表需求,需要低成本應(yīng)對(duì)方案
專門用于統(tǒng)計(jì)分析的報(bào)表業(yè)務(wù)有一個(gè)特點(diǎn),就是業(yè)務(wù)穩(wěn)定性非常差。在業(yè)務(wù)開展過(guò)程中會(huì)催生很多新的查詢需求,而且已實(shí)現(xiàn)的查詢需求還會(huì)經(jīng)常變化,這就造成了沒(méi)完沒(méi)了的報(bào)表。所以經(jīng)常會(huì)有這么一段對(duì)話
報(bào)表沒(méi)完沒(méi)了是需求使然,無(wú)法規(guī)避,只能適應(yīng),而目前主要的是問(wèn)題是普遍缺少一種低成本的方案來(lái)適應(yīng)沒(méi)完沒(méi)了的報(bào)表。
為什么報(bào)表開發(fā)成本一直居高不下?
我們知道,報(bào)表工具的主要作用是將報(bào)表呈現(xiàn)階段的開發(fā)工具化,使用報(bào)表工具可以將原本需要硬編碼的工作通過(guò)工具來(lái)提高生產(chǎn)效率;但報(bào)表開發(fā)的另一個(gè)階段:數(shù)據(jù)準(zhǔn)備,卻仍然在使用原始的硬編碼方式處理,有時(shí)我們要編寫非常復(fù)雜的 SQL、存儲(chǔ)過(guò)程和 JAVA 程序,這樣的工作通常要依賴高水平的技術(shù)人員才能完成。
另外,采用過(guò)于原始手段會(huì)帶來(lái)報(bào)表維護(hù)困難,復(fù)雜的代碼無(wú)論從編寫還是修改都比較困難,這樣又會(huì)加劇報(bào)表開發(fā)成本居高不下!
除了技術(shù)原因外,還有應(yīng)用結(jié)構(gòu)和團(tuán)隊(duì)管理方面的因素也會(huì)造成報(bào)表開發(fā)的成本居高不下。在許多應(yīng)用系統(tǒng)中,報(bào)表是耦合在其中的一些功能,而業(yè)務(wù)系統(tǒng)的技術(shù)環(huán)境很復(fù)雜,這就迫使報(bào)表開發(fā)人員也要熟悉這些東西,也就很難把報(bào)表開發(fā)人員和業(yè)務(wù)系統(tǒng)的開發(fā)人員分開,業(yè)務(wù)系統(tǒng)上線之后,開發(fā)人員仍然要繼續(xù)堅(jiān)守開發(fā)報(bào)表,很難把這項(xiàng)工作轉(zhuǎn)交給客戶方的運(yùn)維人員。
開發(fā)過(guò)程中的有效溝通也會(huì)影響工作量。我們經(jīng)常會(huì)發(fā)現(xiàn)這樣的現(xiàn)象:業(yè)務(wù)人員提出報(bào)表需求,等技術(shù)人員做好后才發(fā)現(xiàn)某些概念術(shù)語(yǔ)的理解有誤,統(tǒng)計(jì)口徑不一致,結(jié)果并不是業(yè)務(wù)人員想要的,然后也只能重做,甚至反復(fù)多次才能正確實(shí)現(xiàn),嚴(yán)重浪費(fèi)開發(fā)資源。
如何解決報(bào)表開發(fā)成本過(guò)高?如何低成本地應(yīng)對(duì)沒(méi)完沒(méi)了的報(bào)表?
可以嘗試通過(guò)如下五個(gè)步驟來(lái)解決這些問(wèn)題。
1. 引入報(bào)表工具
先把最容易解決的問(wèn)題解決掉,通過(guò)引入專業(yè)的報(bào)表工具解放報(bào)表數(shù)據(jù)呈現(xiàn)階段的人力,報(bào)表工具可以完成包括中國(guó)式復(fù)雜報(bào)表在內(nèi)的各種圖表呈現(xiàn)。選擇成熟且性價(jià)比高的工具是這個(gè)階段的主要目標(biāo)。
2. 增加計(jì)算模塊
引入報(bào)表工具后,解放了數(shù)據(jù)呈現(xiàn)階段的人力,降低了一定的成本,但占主要部分的報(bào)表數(shù)據(jù)準(zhǔn)備階段仍未解決。
數(shù)據(jù)準(zhǔn)備階段的特點(diǎn)是:
1. 編碼困難,沒(méi)有普適的工具
2. 對(duì)人員要求高,需要高水平技術(shù)人員完成
3. 實(shí)現(xiàn)周期過(guò)長(zhǎng),難以適應(yīng)多變的報(bào)表需求
4. 硬編碼耦合性高,依賴數(shù)據(jù)庫(kù)和 JAVA 都都會(huì)造成緊耦合
5. 運(yùn)維過(guò)于復(fù)雜,修改維護(hù)成本提高
這時(shí),我們需要沿著第一步的方向繼續(xù)前進(jìn),將數(shù)據(jù)準(zhǔn)備階段也工具化。比較好的方式是
在報(bào)表工具中增加用于數(shù)據(jù)準(zhǔn)備的計(jì)算模塊,將原來(lái)使用 SQL/ 存儲(chǔ)過(guò)程 /JAVA 實(shí)現(xiàn)的數(shù)據(jù)準(zhǔn)備算法,全部通過(guò)計(jì)算模塊完成,使得報(bào)表開發(fā)徹底工具化,簡(jiǎn)化開發(fā),降低成本。
計(jì)算模塊的能力可以通過(guò)腳本來(lái)實(shí)現(xiàn),在腳本中內(nèi)置各種豐富的計(jì)算類庫(kù),讓報(bào)表開發(fā)人員獨(dú)立就能完成數(shù)據(jù)準(zhǔn)備階段的工作,從而全面接管報(bào)表的開發(fā),而不再依賴其他專業(yè)程序員。
這里尤其要注意,報(bào)表計(jì)算模塊需要具備這樣一些能力。
1. 易于編碼
包含豐富的計(jì)算類庫(kù),可以很方便地完成各類數(shù)據(jù)計(jì)算任務(wù);必要時(shí)還能提供可視化的編輯調(diào)試環(huán)境進(jìn)一步簡(jiǎn)化這個(gè)階段的開發(fā);
2. 支持熱切換
計(jì)算模塊需采用解釋執(zhí)行機(jī)制,這樣可以很好地和前端報(bào)表呈現(xiàn)模板結(jié)合在一起,報(bào)表修改后可以實(shí)時(shí)生效,無(wú)需重啟整個(gè)應(yīng)用;
3. 支持多樣性數(shù)據(jù)源
提供 RDB、NoSQL、文本、Excel、hadoop 等多樣性數(shù)據(jù)源接口,報(bào)表直接基于多言行數(shù)據(jù)源開發(fā),也可以進(jìn)行混合計(jì)算(如 Excel 和 RDB 的表 join);
4. 高性能
計(jì)算模塊的計(jì)算性能不能低于原來(lái) SQL/JAVA 的計(jì)算性能,最好高于原來(lái)的實(shí)現(xiàn)方式。
報(bào)表開發(fā)全面工具化以后,就可以獲得更高的報(bào)表開發(fā)效率,進(jìn)一步降低報(bào)表開發(fā)成本。
3. 獨(dú)立報(bào)表模塊
報(bào)表開發(fā)全面工具化以后,就可以著手梳理應(yīng)用結(jié)構(gòu),獨(dú)立報(bào)表模塊,從而將報(bào)表模塊從業(yè)務(wù)系統(tǒng)中解耦出來(lái)。
1. 梳理數(shù)據(jù)源
首先梳理數(shù)據(jù)源,將報(bào)表業(yè)務(wù)相關(guān)的數(shù)據(jù)源都整理出來(lái),以后的報(bào)表開發(fā)只需要和這些數(shù)據(jù)源打交道;同時(shí)為下一步剝離報(bào)表業(yè)務(wù)做準(zhǔn)備。
2. 剝離報(bào)表業(yè)務(wù)
將數(shù)據(jù)源和業(yè)務(wù)應(yīng)用中與報(bào)表相關(guān)的數(shù)據(jù)準(zhǔn)備(復(fù)雜 SQL、存儲(chǔ)過(guò)程、中間匯總表、自定義 JAVA 類)全部轉(zhuǎn)移到報(bào)表工具中實(shí)現(xiàn);同時(shí)將這些內(nèi)容從數(shù)據(jù)庫(kù)和業(yè)務(wù)應(yīng)用中清除,完成報(bào)表業(yè)務(wù)剝離。
3. 獨(dú)立報(bào)表模塊
報(bào)表業(yè)務(wù)完全剝離后,在報(bào)表工具中實(shí)現(xiàn)的報(bào)表在物理上就可以獨(dú)立于數(shù)據(jù)源和業(yè)務(wù)模塊存儲(chǔ),不再與業(yè)務(wù)系統(tǒng)和數(shù)據(jù)源緊密耦合,完全獨(dú)立報(bào)表模塊
4. 調(diào)整應(yīng)用結(jié)構(gòu)
獨(dú)立報(bào)表模塊后,報(bào)表模塊與業(yè)務(wù)模塊共享數(shù)據(jù)存儲(chǔ);應(yīng)用系統(tǒng)調(diào)用報(bào)表模塊為用戶輸出報(bào)表結(jié)果;同時(shí)解釋執(zhí)行報(bào)表模塊支持熱切換,即改即用,無(wú)需重啟應(yīng)用。
獨(dú)立報(bào)表模塊以后,報(bào)表就可以單獨(dú)修改和維護(hù),清晰的應(yīng)用結(jié)構(gòu)會(huì)進(jìn)一步降低報(bào)表開發(fā)成本。
4. 建設(shè)報(bào)表團(tuán)隊(duì)
報(bào)表模塊獨(dú)立后,建設(shè)專門的報(bào)表開發(fā)團(tuán)隊(duì),不再需要高成本應(yīng)用程序員或 DBA 參與報(bào)表開發(fā),進(jìn)一步降低報(bào)表開發(fā)成本。
報(bào)表開發(fā)人員就無(wú)需應(yīng)對(duì)紛繁復(fù)雜的應(yīng)用環(huán)境,更無(wú)需關(guān)系應(yīng)用架構(gòu),只需根據(jù)已有架構(gòu)開發(fā)報(bào)表就可以了。半年以上工作經(jīng)驗(yàn)的技術(shù)人員就能勝任(其實(shí),理工科應(yīng)屆畢業(yè)生就可以了,甚至高中學(xué)歷都行)。
簡(jiǎn)化報(bào)表開發(fā)后,還可以嘗試將持續(xù)的報(bào)表開發(fā)工作移交給客戶方的本地運(yùn)維人員,這樣不僅能降低開發(fā)商的成本,還能提高對(duì)客戶的響應(yīng)速度。
5. 完善溝通機(jī)制
最后就是建立有效的溝通機(jī)制,減少交流中的誤解。
一個(gè)簡(jiǎn)單可行的辦法就是建立企業(yè)內(nèi)部的報(bào)表知識(shí)庫(kù),技術(shù)形式上搞一個(gè)論壇即可。把以前做過(guò)的報(bào)表收集到論壇上加以評(píng)注,并提供搜索功能。
當(dāng)有了新的報(bào)表需求時(shí),可以搜索歷史庫(kù)中是否曾經(jīng)做過(guò)類似的報(bào)表(出現(xiàn)過(guò)相同的業(yè)務(wù)術(shù)語(yǔ))。歷史報(bào)表中保留有相關(guān)代碼或公式,而這些形式化的信息不會(huì)有歧義,這就能幫助新的開發(fā)人員正確理解業(yè)務(wù)術(shù)語(yǔ)。
甚至許多報(bào)表部分還可以被直接復(fù)用,在人員變動(dòng)時(shí)也可以最大限度地保證業(yè)務(wù)知識(shí)的繼承。
應(yīng)對(duì)報(bào)表沒(méi)完沒(méi)了是一個(gè)長(zhǎng)期的過(guò)程,是涉及技術(shù)、管理等諸多方面的綜合性事務(wù)。當(dāng)這些步驟完成以后就可以全方位應(yīng)對(duì)沒(méi)完沒(méi)了的報(bào)表了。
擴(kuò)展閱讀:
應(yīng)對(duì)報(bào)表沒(méi)完沒(méi)了的五個(gè)步驟
一勞永逸地“解決”沒(méi)完沒(méi)了的報(bào)表開發(fā)
總結(jié)
以上是生活随笔為你收集整理的自定义报表 java_报表为什么会没完没了?怎么解决这个问题?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: gta5第三个逃犯位置在哪
- 下一篇: 麒麟810什么水平