常做數(shù)據(jù)信息化、
數(shù)據(jù)分析的同學(xué)基本都遇到過(guò)這個(gè)問(wèn)題,看著不起眼的報(bào)表任務(wù),做起來(lái)卻占用了很多時(shí)間,總是不斷的有新報(bào)表要做,老報(bào)表要改,總是有難纏的數(shù)據(jù)準(zhǔn)備要去寫(xiě)復(fù)雜 SQL 或者存儲(chǔ)過(guò)程甚至 JAVA 代碼,原本以為初級(jí)工程師就可以搞定的事情卻始終都得有高級(jí)工程師跟著,
報(bào)表給人的感覺(jué)像是沒(méi)完沒(méi)了的,資源的投入也沒(méi)完沒(méi)了,成本始終居高不下,一個(gè)簡(jiǎn)單的報(bào)表模塊,卻每每成了項(xiàng)目的拖累
報(bào)表為什么沒(méi)完沒(méi)了?
報(bào)表沒(méi)完沒(méi)了確實(shí)是存在的,也是一個(gè)無(wú)法規(guī)避的事實(shí),因?yàn)閳?bào)表的業(yè)務(wù)穩(wěn)定性本身就比較差,在統(tǒng)計(jì)和分析的過(guò)程中,總會(huì)碰撞和催生出新的、或者更合理的需求,那就需要修改或者做新的才可以,這與實(shí)施方和用戶的經(jīng)驗(yàn)無(wú)關(guān),誰(shuí)都避免不了有同學(xué)會(huì)說(shuō),
BI 不就可以解決用戶的報(bào)表沒(méi)完沒(méi)了的問(wèn)題嗎,給客戶上一套 BI,有需求用戶自己去做就可以了,我們就解脫了,確實(shí)有人這么做過(guò),但還是解決不了,因?yàn)?BI 有局限性,感興趣的同學(xué)可以參考這個(gè)帖子,這里就不細(xì)說(shuō)這個(gè)話題了自助報(bào)表和 BI 能解決多少事?
報(bào)表沒(méi)完沒(méi)了無(wú)法規(guī)避,開(kāi)發(fā)成本就只能居高不下嗎?不然我們先來(lái)分析一下開(kāi)發(fā)成本高的地方在哪里,然后再看有沒(méi)有辦法降低成本
開(kāi)發(fā)成本為什么居高不下?
被報(bào)表沒(méi)完沒(méi)了困擾的開(kāi)發(fā)團(tuán)隊(duì),基本上都會(huì)用
報(bào)表工具來(lái)提升開(kāi)發(fā)效率,不用工具的很少。報(bào)表工具也的確不負(fù)眾望,可以很大程度的提升效率,節(jié)省開(kāi)發(fā)成本,但是報(bào)表工具本身也有差異,效率也就有高低之分,就算是效率稍微差那么一點(diǎn)點(diǎn),長(zhǎng)年累月無(wú)數(shù)個(gè)項(xiàng)目累積下來(lái),也是一個(gè)不小的數(shù)字開(kāi)發(fā)成本居高不下的原因,很有可能就是選了開(kāi)發(fā)效率低的工具好的報(bào)表工具確實(shí)可以很好地提升制表方面的效率,降低成本,但是報(bào)表開(kāi)發(fā)的難題,并不全在制表上,還有相當(dāng)一部分在數(shù)據(jù)準(zhǔn)備上應(yīng)用中的報(bào)表,有 80% 的數(shù)據(jù)來(lái)源和計(jì)算都比較簡(jiǎn)單,很多一個(gè)簡(jiǎn)單的 SQL 語(yǔ)句就搞定了,但還有 20% 的情況中,數(shù)據(jù)準(zhǔn)備工作就沒(méi)有那么好做了,一些過(guò)程式的多步驟復(fù)雜計(jì)算,常常要寫(xiě)很長(zhǎng)的多層嵌套的 SQL 或者存儲(chǔ)過(guò)程才能搞定,如果數(shù)據(jù)來(lái)源再?gòu)?fù)雜一些,要對(duì)各類數(shù)據(jù)源混算,一些非關(guān)系數(shù)據(jù)庫(kù)或者文本數(shù)據(jù)源都不支持 SQL 了,那還得用 JAVA 等語(yǔ)言來(lái)寫(xiě),SQL 10 幾行能寫(xiě)完的,JAVA 恨不得寫(xiě)出幾百行來(lái),編碼難度和效率就更糟糕了然而恰恰就是這僅占 20% 的需要硬編碼來(lái)做復(fù)雜數(shù)據(jù)準(zhǔn)備的報(bào)表,可能會(huì)占去我們 80% 的工作量,讓開(kāi)發(fā)成本徒增有人可能會(huì)想到,數(shù)據(jù)源準(zhǔn)備,也不屬于報(bào)表工具的能力范疇啊,所以這個(gè)開(kāi)發(fā)困難,成本高的鍋不能讓報(bào)表工具來(lái)背,確實(shí)是的,數(shù)據(jù)源準(zhǔn)備太困難不能怪報(bào)表工具,但仍然屬于報(bào)表開(kāi)發(fā)的范圍,我們也得解決,報(bào)表工具解決不了可以尋找其他工具!上面說(shuō)到的,有些報(bào)表會(huì)涉及很長(zhǎng)的存儲(chǔ)過(guò)程和自定義 JAVA 代碼,這樣會(huì)造成報(bào)表模塊和整個(gè)業(yè)務(wù)系統(tǒng)的高度耦合,維護(hù)修改報(bào)表的時(shí)候,整個(gè)應(yīng)用系統(tǒng)可能都得一起停擺、重啟,維護(hù)起來(lái)不方便,成本就會(huì)高而且這些復(fù)雜的 SQL,存儲(chǔ)過(guò)程,自定義 JAVA,以及性能問(wèn)題的排查,全部都得高級(jí)技術(shù)人員去做才可以, 什么都用高級(jí)人員,成本自然又會(huì)變高除了技術(shù)原因外,溝通和管理上的問(wèn)題也會(huì)導(dǎo)致開(kāi)發(fā)成本上升,比如用戶要求做表,做完以后才發(fā)現(xiàn)用戶說(shuō)的概念術(shù)語(yǔ)和我們理解的有偏差,統(tǒng)計(jì)的不對(duì),那就得修改,返工。再比如有些報(bào)表是可以復(fù)用的,或者稍加改動(dòng)就可以吻合新的報(bào)表需求,就不需要重做了,但是開(kāi)發(fā)人員太多,如果報(bào)表管理做的不好,就每個(gè)表都得做一次,浪費(fèi)很多開(kāi)發(fā)量這些就是成本居高不下的主要原因,找到原因后,我們就可以挨個(gè)想辦法去解決了
解決方案
用報(bào)表工具,尤其是高效的工具,可以顯著提升報(bào)表設(shè)計(jì)與呈現(xiàn)的效率,降低開(kāi)發(fā)成本

要用高效的,大家都知道,但怎么選高效的,卻不是一件簡(jiǎn)單的事情,驗(yàn)證工具的效率,需要一套科學(xué)嚴(yán)謹(jǐn)?shù)牡姆椒ǎ行枰目梢宰屑?xì)看看這篇帖子怎樣考察報(bào)表工具的開(kāi)發(fā)效率?具體的方法帖子里都有詳細(xì)說(shuō)明,本文就不展開(kāi)聊了,只說(shuō)一個(gè)驗(yàn)證時(shí)候最容易掉的陷阱 --- 初學(xué)者陷阱有一些工具把易于初學(xué)者學(xué)習(xí)的一步步的可視操作當(dāng)成賣點(diǎn),宣稱開(kāi)發(fā)效率高,零編碼,考察人員也覺(jué)得這樣確實(shí)很好用,很簡(jiǎn)單,但這樣就掉進(jìn)陷阱中了,
初學(xué)者易上手絕對(duì)不等于效率高!反而一步步的可視化的引導(dǎo)操作會(huì)成為提升開(kāi)發(fā)效率的很大障礙因?yàn)殚_(kāi)發(fā)報(bào)表的大都是技術(shù)人員,技術(shù)人員是很容易從一個(gè)初學(xué)者變成熟手的, 對(duì)于一個(gè)熟手來(lái)說(shuō),幾秒鐘寫(xiě)個(gè)表達(dá)式,其表達(dá)能力要遠(yuǎn)遠(yuǎn)比一步步的通過(guò)對(duì)話框設(shè)置各種計(jì)算條件要強(qiáng)大得多也簡(jiǎn)單的多,各種可視化設(shè)置就成了初學(xué)者之蜜糖,熟手之砒霜了當(dāng)然如果沒(méi)有時(shí)間詳細(xì)考察也無(wú)妨,選一些老牌的大家常用的工具就可以,像潤(rùn)乾報(bào)表這樣的,已經(jīng)有 20 年經(jīng)驗(yàn)和歷史的,經(jīng)歷了無(wú)數(shù)用戶驗(yàn)證的,開(kāi)發(fā)效率都是遠(yuǎn)高于其他工具的高效的報(bào)表工具,可以提升報(bào)表設(shè)計(jì)和呈現(xiàn)的效率,但對(duì)報(bào)表數(shù)據(jù)準(zhǔn)備階段的開(kāi)發(fā)壓力卻仍舊無(wú)能為力

這就需要有新的工具才可以解決,一種比編寫(xiě)復(fù)雜 SQL,存儲(chǔ)過(guò)程,JAVA 更高效,成本更低的計(jì)算工具才可以這樣的工具其實(shí)并不新鮮,早就有了,潤(rùn)乾出品的集算器 SPL 就是專業(yè)的計(jì)算工具,因?yàn)楹?jiǎn)單高效,而且開(kāi)源免費(fèi),已經(jīng)是比較流行的工具了,它有如下幾個(gè)特點(diǎn)
1 易于編碼SPL 包含豐富的計(jì)算類庫(kù),可以很方便地完成各類數(shù)據(jù)計(jì)算任務(wù);提供可視化的編輯調(diào)試環(huán)境, 初級(jí)工程師就可以很快上手,不需要全程都得高級(jí)工程師跟進(jìn)了
2 支持熱切換SPL 采用解釋執(zhí)行機(jī)制,可以很好地和前端報(bào)表呈現(xiàn)模板結(jié)合在一起,報(bào)表修改后可以實(shí)時(shí)生效,無(wú)需重啟整個(gè)應(yīng)用

3 支持多樣性數(shù)據(jù)源支持 RDB、NoSQL、文本、Excel、hadoop json 等多樣性數(shù)據(jù)源,可以進(jìn)行混合計(jì)算(如 Excel 和 RDB 的表 join);
4 高性能SPL 的性能在大部分場(chǎng)景下都已經(jīng)被驗(yàn)證過(guò)是高于甚至是遠(yuǎn)高于 SQL 的

當(dāng)頻繁復(fù)雜困難的數(shù)據(jù)準(zhǔn)備過(guò)程,也有了趁手的工具可以解決以后,開(kāi)發(fā)就變的簡(jiǎn)單輕松了,成本也自然就低了另外再?gòu)?qiáng)調(diào)一點(diǎn),SPL 是開(kāi)源免費(fèi)的,是一個(gè)通用的計(jì)算工具,不僅潤(rùn)乾報(bào)表可以用它,其他報(bào)表工具以及各類前端應(yīng)用,也都可以用它報(bào)表與業(yè)務(wù)系統(tǒng)的高度耦合,導(dǎo)致報(bào)表不易維護(hù),還影響了業(yè)務(wù)系統(tǒng)的穩(wěn)定,那我們就想辦法把報(bào)表模塊獨(dú)立出來(lái),原先是沒(méi)有這個(gè)條件,現(xiàn)在有了計(jì)算工具以后,存儲(chǔ)過(guò)程,各種中間表,JAVA 程序就可以慢慢剝離開(kāi)了,報(bào)表就完全可以和業(yè)務(wù)系統(tǒng)解耦了
1 梳理數(shù)據(jù)源首先梳理數(shù)據(jù)源,將報(bào)表業(yè)務(wù)相關(guān)的數(shù)據(jù)源都整理出來(lái),以后的報(bào)表開(kāi)發(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)表工具,計(jì)算工具中實(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)表就可以獨(dú)立于數(shù)據(jù)源和業(yè)務(wù)模塊存儲(chǔ),不再與業(yè)務(wù)系統(tǒng)和數(shù)據(jù)源緊密耦合了,解釋執(zhí)行報(bào)表和計(jì)算模塊支持熱切換,即改即用,無(wú)需重啟應(yīng)用;不管報(bào)表要怎么加怎么改,都不會(huì)影響到業(yè)務(wù)模塊了,而且獨(dú)立的報(bào)表 + 計(jì)算模塊,維護(hù)起來(lái)也更簡(jiǎn)單了,不需要投入太多成本了

原先因?yàn)榭傆欣щy的數(shù)據(jù)準(zhǔn)備任務(wù),不是得寫(xiě)大段復(fù)雜的存儲(chǔ)過(guò)程,就是得做 JAVA 開(kāi)發(fā),處處離不開(kāi)高級(jí)工程師,有了計(jì)算工具后,困難的事情都變簡(jiǎn)單了,復(fù)雜的數(shù)據(jù)準(zhǔn)備工作不存在了,疑難的性能問(wèn)題也沒(méi)有了,自然就不需要浪費(fèi)高級(jí)人員了

不需要去應(yīng)對(duì)復(fù)雜的應(yīng)用環(huán)境,也不用管什么架構(gòu),只需要專注開(kāi)發(fā)報(bào)表就可以,那建設(shè)一支應(yīng)屆生報(bào)表團(tuán)隊(duì)就完全沒(méi)問(wèn)題了,既節(jié)省了成本,還讓新人挑起了重?fù)?dān),歷練了新人
另外報(bào)表開(kāi)發(fā)簡(jiǎn)化后,還可以嘗試將持續(xù)的報(bào)表開(kāi)發(fā)工作移交給客戶方的本地運(yùn)維人員,這樣不僅能降低開(kāi)發(fā)商的成本,也可以讓客戶更自由方便一些,對(duì)雙方都是好事情溝通成本高,而且總有偏差,可以通過(guò)建立知識(shí)庫(kù)來(lái)解決,比如統(tǒng)計(jì)好行業(yè)常用的指標(biāo)計(jì)算方式,記錄好每個(gè)客戶業(yè)務(wù)術(shù)語(yǔ)的含義比如用戶要做一個(gè)大客戶信息表,我們就可以先查一下知識(shí)庫(kù)中有沒(méi)有記錄“大客戶”是怎么定義的,這樣就可以有效的避免偏差返工,節(jié)省成本
報(bào)表總是重復(fù)去做,也可以通過(guò)報(bào)表知識(shí)庫(kù)來(lái)解決,把歷史的報(bào)表都保存好,做好注釋備注,遇到同樣的或類似的報(bào)表時(shí),就可以直接拿來(lái)改改用了

至此,導(dǎo)致成本過(guò)高的幾個(gè)難題,就都一一擊破了,一套組合拳打出后,回頭再看,只剩下一地紙老虎了
總結(jié)
報(bào)表總是得做新的改舊的,總是沒(méi)完沒(méi)了的,這的確是一個(gè)讓人頭疼的事情,而且這還是一個(gè)合理的、讓人無(wú)法規(guī)避的事情。躲不了,那就得想辦法解決,不能讓它一直困擾我們,更不能讓成本白白被消耗掉,傳統(tǒng)的單一報(bào)表工具形式已經(jīng)明顯無(wú)力解決這個(gè)難題,而要采用文中提到的組合拳才可以有效應(yīng)對(duì)而且這套組合拳,不僅可以把高昂的開(kāi)發(fā)成本打下來(lái),還能讓我們?cè)诠ぞ叱杀旧弦泊笫∫还P,雖然多了一個(gè)計(jì)算工具,但它是開(kāi)源免費(fèi)的,配上 1W 一套,3W 隨便用的潤(rùn)乾報(bào)表,就可以去隨便 KO 各種報(bào)表開(kāi)發(fā)難題了
(部分內(nèi)容來(lái)源網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除)