如何復用多個報表的資料來源

2021-06-28 10:45:03 字數 1666 閱讀 5818

在報表專案中,經常有多個報表的資料來源計算方法有共同的部分。使用潤幹集算報表,採用可掛接演算法的方案時(參見可以更方便地將這些共同部分用同乙個指令碼來完成,從而實現演算法復用。演算法復用的好處是:乙個演算法只實現一次,不會出現同乙個演算法多處實現導致不一致的情況。同時也避免乙個演算法實現很多次的重複勞動,減輕工作量。

下面通過兩個報表復用同乙個演算法的例子來看一下具體的實現方法。報表1是「員工績效工資明細表」,可以按照state來選擇不同的員工例如:state=="california" 或者state=="texas",如下圖:

報表2是「部門績效工資彙總表」(全體員工,不按照state過濾),如下圖:

報表1、2都要計算員工的績效工資,演算法是比較複雜的。如果兩個報表都實現一遍這個計算,會有兩個問題:乙個是重複工作費時費力,另乙個是一旦計算方法發生改變,就要修改兩個地方,可能會出現不一致。使用集算報表可以用乙個計算指令碼來編寫績效工資演算法,實現兩個報表復用乙個指令碼。

集算報表還可以完成動態表示式解析,所以可以接收非常靈活的過濾條件或者其他表示式。集算引擎的引數定義如下圖:

集算報表的計算指令碼(salary.dfx)如下:

a3:判斷過濾條件是否為空,如果為空就不執行過濾b3。

b3:按照條件過濾。這裡使用巨集來實現動態解析表示式,其中的where就是傳入引數。集算器先計算$裡的表示式,將計算結果作為巨集字串值替換$之後解釋執行。這個例子中最終執行的是:=a2.select@o(state=="california" || state=="texas")。

a13單元格是將結果返回給報表頁面。a4到a13之間是績效工資的計算方法,不是本文重點,這裡不詳細介紹。如果where= state=="california" || state=="texas"。a13的返回結果如下:

如果where=」」,a13的返回結果如下:

報表1的模板設計如下圖:

報表1資料集ds1定義如下:

雖然報表內容、樣式不同,但是兩個報表的資料集都呼叫乙個共同的指令碼檔案。如果將來績效工資的計算方法發生變化,只要修改salary.dfx即可,報表1、2的模板檔案不用改變。

多資料來源報表解析之簡單多源報表

多資料來源報表即一張報表中可以定義多個資料集,分別取出需要的資料庫表,所取的資料庫表甚至可以來自於不同的資料庫。本文通過幾個例子說明多個資料集資料如何相互關聯來實現多源報表。1.描述 多資料來源,就是在同一張報表當中,顯示的資料來自於多個不同的表或不同的庫。如下圖一張簡單的多資料來源報表,左側藍色部...

多資料來源報表解析之簡單多源報表

多資料來源報表即一張報表中可以定義多個資料集,分別取出需要的資料庫表,所取的資料庫表甚至可以來自於不同的資料庫。本文通過幾個例子說明多個資料集資料如何相互關聯來實現多源報表。1.描述 多資料來源,就是在同一張報表當中,顯示的資料來自於多個不同的表或不同的庫。如下圖一張簡單的多資料來源報表,左側藍色部...

多個資料來源的輕鬆支援

前面文章裡介紹了 自定義註解完成資料庫切庫 今天接著這個高併發的話題,繼續說一下專案裡多個資料來源的支援。如何理解支援多個資料來源呢?簡單的說,就是乙個專案裡,同時可以訪問多個不同的資料庫。場景假設 專案底層有正常業務庫和日誌庫,希望解決的是將專案中的一些日誌單獨記錄到乙個庫里,比如使用者操作記錄 ...