本技術(shù)涉及報告生成,尤其涉及一種智能指標(biāo)報告計算生成方法、設(shè)備及介質(zhì)。
背景技術(shù):
1、基于數(shù)據(jù)驅(qū)動決策的重要性,各種行業(yè)和領(lǐng)域?qū)χ悄芑闹笜?biāo)計算和報告生成的需求也在不斷增長。用戶可以基于銷售數(shù)據(jù),自動生成不同維度的銷售報告(如按地區(qū)、產(chǎn)品、時間段),并根據(jù)歷史趨勢預(yù)測未來銷售額?,F(xiàn)有的解決方案通常有excel和其他電子表格統(tǒng)計、專用商業(yè)工具等。
2、對于一些中小型企業(yè)而言,如果使用手動計算和報告生成,通常存在效率低下和擴展性差的問題。手動計算和報告生成耗時耗力,尤其是在處理大量數(shù)據(jù)或復(fù)雜計算時,容易出錯。當(dāng)數(shù)據(jù)量或指標(biāo)種類增加時,手動方法難以維持,且缺乏自動化能力,擴展性差。而如果使用專用商業(yè)智能工具,也存在如下問題:1)通常價格昂貴,尤其對中小型企業(yè)而言,初期投資和持續(xù)使用費用較高;2)學(xué)習(xí)成本高,需要專門的培訓(xùn)才能充分利用這些工具的功能,非技術(shù)人員可能難以上手;3)難以功能自定義,雖然商業(yè)智能工具提供了豐富的功能,但對于非常特定的業(yè)務(wù)需求,定制化可能受限。
3、因此,亟需一種智能指標(biāo)報告計算生成方法、設(shè)備及介質(zhì),以解決上述手動生成效率低、容易出錯、商業(yè)智能工具生成成本高、難以功能自定義等問題。
技術(shù)實現(xiàn)思路
1、針對現(xiàn)有技術(shù)的上述不足,本技術(shù)提供一種智能指標(biāo)報告計算生成方法、設(shè)備及介質(zhì),以解決現(xiàn)有指標(biāo)報告手動生成效率低、容易出錯、商業(yè)智能工具生成成本高、難以功能自定義等問題。
2、第一方面,本技術(shù)提供了一種智能指標(biāo)報告計算生成方法,方法包括:
3、當(dāng)計算節(jié)點啟動時,到預(yù)設(shè)redis上注冊節(jié)點信息,并通過本地心跳機制定時向redis發(fā)送心跳數(shù)據(jù);通過任意計算節(jié)點,獲取待統(tǒng)計報表對應(yīng)的源數(shù)據(jù),進(jìn)而同步源數(shù)據(jù)對應(yīng)的目標(biāo)表到當(dāng)前計算節(jié)點的分析數(shù)據(jù)庫中;獲取待統(tǒng)計報表對應(yīng)的報表統(tǒng)計維度參數(shù)、主體數(shù)據(jù)名稱、查詢條件、統(tǒng)計項;其中,統(tǒng)計項包含若干預(yù)設(shè)指標(biāo)項,且預(yù)設(shè)指標(biāo)項包括指標(biāo)id、指標(biāo)屬性、指標(biāo)名稱、預(yù)設(shè)運算表達(dá)式;生成當(dāng)前任務(wù)id以及存儲當(dāng)前任務(wù)id與統(tǒng)計項之間的對應(yīng)關(guān)系至共享數(shù)據(jù)庫;當(dāng)前計算節(jié)點根據(jù)主體數(shù)據(jù)名稱和查詢條件從共享數(shù)據(jù)庫中確定所需主體數(shù)據(jù),并基于所需主體數(shù)據(jù)的實際數(shù)量和主體數(shù)據(jù)唯一標(biāo)識,生成實際數(shù)量個處理任務(wù);其中,各個處理任務(wù)均包含一個主體數(shù)據(jù)唯一標(biāo)識;當(dāng)前計算節(jié)點通過redis上的心跳數(shù)據(jù),確定當(dāng)前存活的全部計算節(jié)點,將當(dāng)前任務(wù)id和處理任務(wù)通知至各個計算節(jié)點;各個計算節(jié)點根據(jù)接收到的當(dāng)前任務(wù)id確定所需的預(yù)設(shè)指標(biāo)項,進(jìn)而利用預(yù)設(shè)指標(biāo)項處理處理任務(wù)對應(yīng)的主體數(shù)據(jù),獲得計算結(jié)果;將計算結(jié)果通知生成處理任務(wù)的計算節(jié)點;當(dāng)計算節(jié)點獲得全部處理任務(wù)的計算結(jié)果后,填入目標(biāo)表,并將目標(biāo)表出庫保存。
4、進(jìn)一步地,當(dāng)計算節(jié)點啟動時,到預(yù)設(shè)redis上注冊節(jié)點信息,并通過本地心跳機制定時向redis發(fā)送心跳數(shù)據(jù),具體包括:當(dāng)計算節(jié)點啟動時,到預(yù)設(shè)redis上注冊節(jié)點信息,并設(shè)置過期時間;注冊成功后所有計算節(jié)點每預(yù)設(shè)時間段內(nèi)通過本地心跳機制定時向redis發(fā)送心跳數(shù)據(jù),進(jìn)行心跳?;?。
5、進(jìn)一步地,源數(shù)據(jù)包括數(shù)據(jù)庫和目標(biāo)表名稱;通過任意計算節(jié)點,獲取待統(tǒng)計報表對應(yīng)的源數(shù)據(jù),進(jìn)而同步源數(shù)據(jù)對應(yīng)的目標(biāo)表到當(dāng)前計算節(jié)點的分析數(shù)據(jù)庫中,具體包括:通過任意計算節(jié)點,獲取待統(tǒng)計報表對應(yīng)的數(shù)據(jù)庫和目標(biāo)表名稱;進(jìn)而利用目標(biāo)表名稱,從數(shù)據(jù)庫中的查找對應(yīng)的目標(biāo)表,進(jìn)而將目標(biāo)表同步到當(dāng)前計算節(jié)點的分析數(shù)據(jù)庫中。
6、進(jìn)一步地,將當(dāng)前任務(wù)id和處理任務(wù)分發(fā)至各個計算節(jié)點,具體包括:
7、將處理任務(wù)的實際數(shù)量對計算節(jié)點數(shù)取模,算出每個計算節(jié)點需要計算的處理任務(wù)的分配數(shù)量。
8、進(jìn)一步地,根據(jù)接收到的當(dāng)前任務(wù)id確定所需的預(yù)設(shè)指標(biāo)項,進(jìn)而利用預(yù)設(shè)指標(biāo)項處理處理任務(wù)對應(yīng)的主體數(shù)據(jù),獲得計算結(jié)果,具體包括:
9、計算節(jié)點在接收到處理任務(wù)后,為每個處理任務(wù)創(chuàng)建一個任務(wù)線程放到線程池中;
10、從共享數(shù)據(jù)庫中獲取當(dāng)前任務(wù)id與預(yù)設(shè)指標(biāo)項之間的對應(yīng)關(guān)系,進(jìn)而確定當(dāng)前任務(wù)id所需的預(yù)設(shè)指標(biāo)項,進(jìn)而為每一個預(yù)設(shè)指標(biāo)項創(chuàng)建一個計算任務(wù)并添加到線程池;
11、根據(jù)預(yù)設(shè)指標(biāo)項對應(yīng)的主體數(shù)據(jù)唯一標(biāo)識、指標(biāo)id、當(dāng)前任務(wù)id和報表統(tǒng)計維度參數(shù),生成各個預(yù)設(shè)指標(biāo)項對應(yīng)的md5值;
12、從redis中查詢當(dāng)前md5值對應(yīng)的緩存計算結(jié)果,當(dāng)存在緩存計算結(jié)果時,直接使用;當(dāng)不存在緩存計算結(jié)果時,從預(yù)設(shè)指標(biāo)結(jié)果修正固化表中查詢當(dāng)前md5值對應(yīng)的緩存計算結(jié)果,當(dāng)存在緩存計算結(jié)果時,直接使用;當(dāng)不存在緩存計算結(jié)果時,獲取當(dāng)前預(yù)設(shè)指標(biāo)項的指標(biāo)id;確定當(dāng)前指標(biāo)id對應(yīng)的子指標(biāo)id,進(jìn)而加載子指標(biāo)id對應(yīng)的預(yù)設(shè)指標(biāo)項;當(dāng)預(yù)設(shè)指標(biāo)項不存在子指標(biāo)id且不存在緩存計算結(jié)果時,獲取當(dāng)前預(yù)設(shè)指標(biāo)項對應(yīng)的指標(biāo)屬性;當(dāng)指標(biāo)屬性為非評分屬性時,通過mybatis的@selectprovider注解動態(tài)執(zhí)行當(dāng)前預(yù)設(shè)指標(biāo)項中的預(yù)設(shè)運算表達(dá)式,獲得計算結(jié)果;當(dāng)指標(biāo)屬性為評分屬性時,利用aviatorexpression方式執(zhí)行當(dāng)前預(yù)設(shè)指標(biāo)項中的預(yù)設(shè)運算表達(dá)式,獲得計算結(jié)果。
13、進(jìn)一步地,在獲得計算結(jié)果之后,方法還包括:
14、將計算結(jié)果、md5值、指標(biāo)名稱作為組裝結(jié)果緩存至redis中。
15、進(jìn)一步地,方法還包括:
16、當(dāng)確定共享數(shù)據(jù)庫中任一md5值對應(yīng)的緩存計算結(jié)果為錯誤結(jié)果時,將md5值對應(yīng)的數(shù)據(jù)從共享數(shù)據(jù)庫刪除;獲取md5值對應(yīng)的正確計算結(jié)果,進(jìn)而將md5值對應(yīng)的正確計算結(jié)果存儲至預(yù)設(shè)指標(biāo)結(jié)果修正固化表中。
17、進(jìn)一步地,將當(dāng)前任務(wù)id和處理任務(wù)通知至各個計算節(jié)點,具體包括:
18、將當(dāng)前任務(wù)id和處理任務(wù)通過redis消息隊列通知至各個計算節(jié)點。
19、將計算結(jié)果通知生成處理任務(wù)的計算節(jié)點,具體包括:
20、將計算結(jié)果寫入共享數(shù)據(jù)庫,并通知生成處理任務(wù)的計算節(jié)點。
21、第二方面,本技術(shù)提供了一種智能指標(biāo)報告計算生成設(shè)備,設(shè)備包括:
22、處理器;
23、以及存儲器,其上存儲有可執(zhí)行代碼,當(dāng)可執(zhí)行代碼被執(zhí)行時,使得處理器執(zhí)行如上述任一項的一種智能指標(biāo)報告計算生成方法。
24、第三方面,本技術(shù)提供了一種非易失性計算機存儲介質(zhì),其上存儲有計算機指令,計算機指令在被執(zhí)行時實現(xiàn)如上述任一項的一種智能指標(biāo)報告計算生成方法。
25、本領(lǐng)域技術(shù)人員能夠理解的是,本技術(shù)至少具有如下有益效果:
26、本技術(shù)可以通過任一接收到報表計算請求的計算節(jié)點對報表指標(biāo)計算按照主體信息進(jìn)行計算任務(wù)封裝成任務(wù)列表,并將任務(wù)分配給已在redis注冊且存活的服務(wù)節(jié)點進(jìn)行計算,實現(xiàn)了非中心化的分布式計算,有利于計算主機的擴縮容,充分利用已有的硬件資源。另外,利用各個計算節(jié)點進(jìn)行指標(biāo)計算提高并發(fā)性的同,提升計算效率;綜上,本技術(shù)實現(xiàn)了自動生成目標(biāo)表,無需手動生成也無需借助商業(yè)智能工具,解決現(xiàn)有指標(biāo)報告手動生成效率低、容易出錯、商業(yè)智能(bi)工具生成成本高的問題。
27、另外,本技術(shù)能夠根據(jù)需求確定統(tǒng)計項,進(jìn)而確定具體的預(yù)設(shè)運算表達(dá)式,進(jìn)而實現(xiàn)表達(dá)式自定義的功能,進(jìn)而解決了難以功能自定義等問題。