多資料來源動態關聯報表的製作(birt為例)

2021-07-03 23:27:24 字數 2014 閱讀 6875

使用jasper或birt等報表工具時,常會碰到一些非常規的統計,用報表工具本身或sql都難以處理,比如與主表相關的子表分布在多個資料庫中,報表要展現這些資料來源動態關聯的結果。集算器具有結構化強計算引擎,整合簡單,可以協助報表工具方便地實現此類需求。下面通過乙個例子來說明多資料來源動態關聯的實現過程。

主表org在資料來源master中,org裡每條記錄對應的子表在不同的資料來源中,比如org.org_id=」org_s」時,這條記錄對應的子表是資料來源s_odaurl的user表,org.org_id=」org_t」時,這條記錄對應的子表是資料來源t_odaurl中的user表。子表不止兩個,名字都是user,需要和主表動態關聯再呈現在報表中。邏輯上的關係如下:

集算器**如下:

執行sql,從資料來源master的org表取資料。arg1是來自報表的引數,用來過濾資料,假如arg1=」org」則a1的計算結果如下:

a2: for a1

依次迴圈a1中的記錄,每次動態關聯乙個子表,並將關聯結果合併在b2中。值得注意的是集算器用自然縮進來表示迴圈語句的作用範圍,即b2-b7,迴圈體中可用a2來引用迴圈變數,可用#a2來引用迴圈計數。

b2=right(a2.org_id,1)+"_odaurl"

根據當前記錄的org_id欄位計算出對應子表的資料來源名。第一次迴圈時,b2的計算結果為」 s_odaurl」。

b3=connect(b2)

根據名字連線到資料來源。注意,a1中的資料來源master已配置為自動連線,可以直接使用,b3中的資料來源需要使用函式connect手動連線。

b4=b3.query("select * from user where org=?",a2.org_id)

查詢資料來源b3,按條件取出user表中的資料。

b5=b4.derive(a2.org_id:org_id,a2.org_manager:manager,a2.org_title:title)

在子表b4中新增三列,資料來自主表,重新命名為org_id、manager、title。第一次迴圈時,b5計算結果如下:

將b5的計算結果合併到b1,運算子」|」等價於函式union。迴圈結束後b1會儲存報表需要的完整資料,如下:

關閉資料來源連線。

a8: result b1

將b1返回給報表工具。集算器對外提供jdbc介面,報表工具會將集算器識別為普通資料庫,整合方案請參考相關文件。

對於熟練的程式設計師,還可以使用集算器的長語句來避免迴圈語句,使**更為簡潔:

接下來以birt為例設計一張簡單的分組表,模板如下:

需要定義報表引數pvar,用來對應集算器中的引數。預覽後可以看到報表結果:

報表呼叫集算器的方法和呼叫儲存過程一樣,比如將本指令碼儲存為dynamicdatasource.dfx,則在birt的儲存過程設計器中可以用call dynamicdatasource (?)來呼叫。

springboot 多資料來源動態切換

1.取消單資料來源預設配置 datasourceautoconfiguration.class public static void main string args 2.切換資料來源 aspect component lazy false order 0 order設定aop執行順序 使之在資料庫...

springboot 動態多資料來源配置

1.鋪墊 儲存及獲取資料源 dynamicdatasourcecontextholder 這個類,起到承上啟下的作用,後邊aop切換時,會首先setdatasourcetype,在使用時進行getgetdatasourcetype,同時掃瞄環境時,下面的dynamicdatasourceregist...

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

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