本發明涉及一種基于工程造價計算機描述語言BCL的數據分析裝置及生成方法,具體實現工程造價數據計算過程可視化并可追蹤數據關系進行數據分析,屬于工程造價計算領域。
背景技術:
隨著信息技術不斷發展及企業管理的提升,工程造價計算日益復雜化,且計算深度越發精細化;各類產品軟件幫助解決復雜的業務內容,封裝繁瑣的計算規則,造價人員僅需填寫簡單內容即可完成工程編制。軟件產品的出現,極大的簡化了工作,但其封裝性和過程不可視性,限制了造價人員能力水平的成長,造價人員對編制工程數據正確與否的可控性越來越低,容易產生數據錯誤并被忽略,不利于數據核算工作的進行。
可視化的計算過程能夠幫助造價人員了解數據來源,分析數據準確性及合理性,幫助進行數據查錯。
以電力工程造價舉例,各地市造價類數據具有邏輯相似性,數據之間存在復用可能,目前所有數據零散存在,將這類數據整合,通過數據采樣及大數據分析,可以幫助提升數據正確性及編制效率,實現數據編制的一致性。
數據分析模型通過對費用計算過程的持久化,可供所述數據采樣及大數據分析。
技術實現要素:
本發明的目的是針對現有技術不足提供一種基于工程造價計算機描述語言BCL的數據分析裝置及生成方法,以實現工程造價數據計算過程可視化并可追蹤數據關系進行數據分析。
本發明的技術方案如下:
所述數據分析裝置及數據生成方法是基于工程造價計算描述語言BCL開發,獨立于不同的產品、項目及數據源,具有與開發語言無關性和平臺無關性。
1.所述工程造價計算描述語言BCL,其實現包括:
(1)設計描述具體計算算法規則的代數式及擴展運算表達式結構,即EL表達式;所述EL表達式是對計算算法規則的一個完整描述,以${和}作為起始和結束標記,它在沿襲傳統代數表達式運算特點的同時,支持用于包含多種表達式選擇的條件選擇運算和完成具體計算規則的函數運算在內的其他高級運算功能。與傳統代數運算不同,所述EL表達式包含種類多元化的操作數,支持數值、字符串和變量等類型,其中,變量類型操作數是所述EL表達式支持動態數據掛接的典型體現,其值可以為外部對象的引用,也可以為執行階段設定的具體數 據值。
所述條件表達式以#{和}作為起始和結束標記,其內部包含多個條件分支和至多一個缺省條件分支,每個分支對應一個EL表達式,整個條件選擇表達式的取值為當前被激活條件分支對應的EL表達式計算結果,如:
#{
->條件1:EL表達式1;
->條件2:EL表達式2;
->:EL表達式3;
}
所述函數運算定義了具體的計算規則,以滿足工程造價特定計算需求,其語法結構與C語言兼容,并支持BCL的擴展數據類型,除此之外,所述函數的調用還支持把EL表達式作為參數進行輸入,能夠實現指定工程數據范圍與EL表達式的動態綁定,進而減少表達式代碼冗余,語法格式為:
sum(數據源標記,數據源別名,EL表達式);
(2)分析工程造價計算需求,確定除EL表達式以外的其他計算邏輯單元;
通過對造價工程數據及計算算法、過程的總結歸納,得出任何工程的工程造價復雜計算算法都可分解為最小的原子計算邏輯單元,即:EL表達式、宏表、變量、參數、數據源和包。其中,所述宏表能完整的表示一個具有遞歸、多字段、多記錄、有匯總關系的計算規則。所述數據源用于描述一個工程的數據及其數據范圍,它是BCL語言與工程數據的粘合劑,實現真實數據的傳遞。所述變量是包含數據源、數據過濾算法以及費用計算算法規則在內的具體費用計算結構,相較于僅包含具體數值的參數而言,變量的計算有一定的先后次序,更為復雜,但功能強大。所述包為其他原子計算邏輯單元的容器,能劃定計算邏輯單元的作用范圍,屏蔽命名沖突。
(3)分析工程造價計算過程,基于工程造價計算描述語言BCL擴展并確定分析描述語言,具體包括擴展EL表達式、EL表達式數據分析函數及除EL表達式以外的數據分析邏輯單元;
通過對BCL表達式數據計算算法和過程的總結歸納,在數據計算過程中,可將任意復雜計算過程拆分為包含左操作數、右操作數以及操作符的單步運算集合表述。
所述EL表達式邏輯結構表述如下:
EL表達式
->左操作數:EL表達式
->右操作數:EL表達式
->運算符:EL表達式
所述EL表達式邏輯結構中,左操作數、右操作數、操作符均使用EL表達式標識,其作用在于支持傳統的四則運算類型之外,支持其他形式的數據和運算符擴展。
所述EL表達式邏輯結構分析可知,任意形式計算過程可識別為一系列EL表達式的語法樹形式;語法樹表示方式能具體表述數據計算的過程和數據之間關系,通過對數據計算過程和關系信息記錄,配合BCL數據源標記,記錄整個數據計算生命周期的數據、關系以及過程。記錄語法格式如下:
Record(數據源標記,EL表達式,結果值)。
所述語法格式中,“EL表達式”可替換為Record語法、EL函數、自定義函數、宏變量以及常量的表述;支持Record語法的嵌套調用,其中,所述EL表達式、變量、參數與工程造價計算語言描述一致。所述數據源標記用于描述一個工程的數據及其數據范圍,它是BCL語言與工程數據的粘合劑,實現真實數據的傳遞。
2.一種基于工程造價計算描述語言BCL的數據分析裝置,該裝置是基于工程造價計算描述語言BCL而實現的,包括:計算過程記錄裝置、數據關系建立裝置、記錄信息翻譯裝置以及文件持久化裝置;
所述計算過程記錄裝置將數據計算的每一次運算操作及運算結果進行記錄,同時對輸出內容進行簡化和調優,初步形成可追溯的數據信息。
所述數據關系建立裝置是對上述過程記錄信息進行整理,建立過程與過程、過程與數據源,數據源與數據源之間的數據關系,完善可追溯數據信息鏈路,完成數據與信息之間的關系梳理。
所述記錄信息翻譯裝置是將建立關系后的信息進行可視化翻譯,將機器識別或代碼識別信息翻譯為造價人員可識別信息,形成可視化數據信息。
所述文件持久化裝置是將信息轉化為物理文件并記錄到磁盤,完成數據持久化操作。文件持久化裝置可在數據關系建立裝置之后或可在記錄信息翻譯裝置之后執行,可根據需要,進行使用時翻譯或記錄時翻譯的選擇。
3.一種基于工程造價計算描述語言BCL的數據分析生成方法,是基于工程造價計算描述語言BCL而實現的,其步驟如下:
第一步:編制BCL腳本文件;
依據工程造價計算描述語言BCL編制符合其語法規則的數據計算過程;
第二步:加載BCL腳本,對BCL腳本進行詞法分析,生成EL表達式;
(1)依據工程造價計算描述語言BCL腳本解析裝置,對BCL腳本進行詞法、語法的解析;
(2)創建相應BCL對象,并關聯經語法分析后得到的BCL語法樹;
(3)通過對生成的BCL對象進行分析,獲取待計算BCL語法樹對象;
第三步:解釋執行當前BCL語法樹,按照后序遍歷的方式處理語法樹中的結點,并且對第二步中生成的EL表達式對象進行信息記錄,直至全部BCL語法樹執行完畢;
該過程涉及到的處理包括:
(1)若當前結點為傳統代數運算符結點,則分別計算并獲取左右結點值,作為左右操作數,進行代數運算,并將運算結果值作為當前結點的值;
(2)若當前結點為引用變量結點,則將該結點對應的外部引用對象的值作為當前結點的結果值;
(3)若當前結點為函數參數EL表達式結點,則忽略計算該結點及其左右子樹,待執行相應函數時,再進行計算;
(4)若當前結點為函數結點,則利用函數注冊器,匹配并執行相應函數;
(5)若當前結點為未知變量結點,則匹配并設置為當前運行上下文中數據源的屬性值;
(6)對產生結果值的運算節點進行數據信息記錄,最終形成可視化數據分析模型。
第四步:對記錄信息進行簡化和調優;
該過程涉及的處理包括:
(1)對信息進行篩選和整理,合并冗余信息,排除干擾信息;
以函數和運算符節點為例,說明如何進行冗余信息合并和干擾信息排除;
對工程造價計算描述語言BCL分析可知,EL函數節點僅存在一個子級節點,所述子級節點是對EL函數節點的詳細描述,若當前節點為函數節點,將本條信息與其第一個子級信息進行合并,優化效果如下:
優化前:
優化后:
<Fun Name="_普通人工費_%_"Formula="sum(_過濾普通人工_%_計價_(),人工,_普 通人工費_非%_計價_()*人工.數量/100)">
</Fum>
對運算符節點分析可知,當出現連續運算符操作時,輸出信息存在重復,示例如下:
所述示例可見,聯系運算符操作中,僅對最上級操作符進行記錄即可表述完整操作信息,對出現子父級均為運算符的節點時,排除所有子級節點信息,優化后效果如下:
<加Name="+"Formula="_人工費_()+_材料費_()+_機械費_()">
</加>
其他優化操作包括:
A.函數優化:Filter函數、Var函數、Result函數以及其他自定義函數;
B.常量、變量及宏變量優化;
(2)對漢字進行信息替換,并形成文字信息對照表;
中文漢字采用雙字節處理,出現中文漢字的文件必須以Unicode格式進行存儲,文件大小會比英文和字符文件增加一倍,對信息中漢字進行簡詞描述可以有效的降低物理磁盤占用量;同時為了保證信息的可讀性,對應輸出一套信息對照表,用以支持信息還原。
以Fun函數舉例,調整效果如下:
<Fun Name="_PTRGF_%_"Formula="sum(_GLPTRG_%_JJ_(),RG,_PTRGF_OR%_JJ_()*RG.SL/100)">
信息對照表如下:
所述信息對照表需注意詞語順序,當詞語存在包含關系時,被包含詞語需置于包含詞語下方,否則會出現翻譯錯誤,如:人工費(RGF),人工(RG)。
第五步:建立數據源標識與過程信息的數據關系;
該過程涉及的處理包括:
(1)若當前節點函數節點,則讀取數據源對象的唯一標識,記錄標識屬性,建立數據源標識與過程信息之間關聯關系;
(2)若當前節點為非函數節點,利用節點上下文,建立過程信息之間關聯關系。
第六步:對過程信息進行翻譯處理;
信息翻譯是建立信息可視化的第一步,翻譯過程包括語義翻譯以及義原詞語翻譯,具體描述如下:
所述語義翻譯是將零散和不直觀的信息進行整合,形成具有一定語法含義的語句;
所述義原詞語翻譯是將機器識別名稱進行中文詞語翻譯,如:求和(Sum),截位(Round)。
第七步:對過程信息進行持久化操作,流程結束。
本發明的有益效果是:本發明所述數據分析模型是在工程造價計算描述語言BCL基礎上進行設計和研發,通過對過程信息的整理和記錄,造價人員能夠直接追溯數據來源及計算方式。造價類軟件無需對現有腳本內容進行調整,本發明實現零集成要求,一步完成數據分析模型功能集成。除此之外,由于記錄信息持久化,分析信息文件本身具有獨立性,在脫離產品軟件本身同樣具有數據價值,可單獨利用分析文件進行數據采樣和行業數據分析。
附圖說明
圖1是本發明實施例中基于BCL數據分析裝置的編譯執行機制圖;
圖2是本發明實施例中基于BCL數據分析裝置的編譯執行流程示意圖。
具體實施方式
下面將結合本發明實施例,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
本發明實施例以電力工程造價費用計算為例,提供一種BCL語言的費用計算及數據分析機制,如圖1所示。該實現機制的具體實施過程包括了以下四個步驟,參照圖2可知:
步驟A1:解析和編譯BCL腳本,形成BCL語法樹;
通過解析和編譯BCL腳本,獲得到可執行的BCL語法樹,生成具有層次結構的BCL對象用于進行數據計算。
步驟A2:解析工程造價文件,形成待計算BCL元素并配置工程反應器模塊數據;
針對工程造價文件中包含的計算需求,生成相應種類和數量的待計算BCL元素。以電力工程造價中單個項目劃分為例,內部包含的取費宏表生成對應BCL宏表元素,其對應的工程量作為BCL數據源元素配置存儲在工程反應器模塊中,參與后續BCL元素的計算;
步驟A3:對BCL元素進行編譯執行,對執行過程信息進行記錄;
依據BCL語法樹結構,順序執行全部BCL元素,并在執行過程中對計算信息進行記錄。
步驟A4:對記錄信息進行分析整理和翻譯,并持久化到磁盤文件。
將步驟A3中的到的過程信息進行整理和內容優化,同時進行語義、義原翻譯,形成可視化數據結構,持久化到物理文件中;文件可以獨立做數據采樣和行業數據分析。