優化報表系統結構之報表伺服器計算

2022-04-08 08:53:18 字數 1712 閱讀 1581

在報表專案中,常常會碰到資料庫壓力很大影響整個系統效能的問題。由下面的傳統方案的結構示意圖可以看出,全部資料儲存和源資料計算都放在資料庫完成。當併發訪問量較大的時候,雖然每個報表的資料量不大,還是會造成資料庫壓力過大,成為效能的瓶頸。多數資料庫廠商提供的jdbc介面傳輸資料比較緩慢,在併發量較大的情況,對報表系統效能的影響也非常明顯。

這種情況時可以考慮採用潤幹集算報表提供的本地計算方案。

所謂本地計算,是將一部分計算任務從資料庫中移出到報表伺服器中完成。大多數有一定規模的應用系統中,資料庫和應用伺服器通常會部署在不同的物理機器上。其中,資料庫處於中心地位,要為各個應用系統提供服務。如果運算大部分由資料庫完成,則會導致資料庫壓力過大,而資料庫的擴容成本和難度都相當高。而應用伺服器則不同,不同應用會有不同的應用伺服器硬體,且容易集群擴容。如果能將一部分運算移出資料庫,轉而由與應用伺服器一起部署的報表伺服器完成,則會很大程度地減小資料庫壓力,並且充分利用應用伺服器所在機器的計算能力,提公升系統效能。集算報表方案結構示意圖如下:

從上圖可以看出,潤幹集算報表可以將部分資料從資料庫轉移到報表應用伺服器的本地硬碟。這部分資料可以是計算的中間結果,也可以是部分基礎資料。集算報表內建了集算引擎,可以通過簡潔的指令碼進行本地化的資料計算。因此,從資料儲存和計算兩方面都可以降低資料庫壓力。

部分資料和計算從資料庫轉移到報表應用伺服器上,可以充分利用應用伺服器集群的儲存和計算能力。應用伺服器無論是單機公升級(縱向擴充套件)或者增加集群數量(橫向擴充套件)都要比資料庫伺服器的成本低很多。在本地硬碟上讀取資料的速度要比資料庫jdbc快很多,可以解決這個瓶頸問題。集算引擎還可以進行多執行緒的平行計算,可以充分發揮應用伺服器多cpu、多核的計算能力。因此,潤幹集算報表方案是低成本提高報表應用系統效能的優選方案。

下面,通過「某公司客戶累計銷售額與去年全年銷售額對比報表」的製作,來看一下集算報表是如何實現本地化計算的。報表如下圖:

這張報表中的客戶、訂單數、銷售額都是直接從資料庫中計算的2023年1月-10月的資料。2023年全年的訂單數、銷售額是從報表應用伺服器檔案系統中的temp2009sales.b檔案中讀取。「銷售額/去年銷售額」則是今年和去年的資料共同計算的。報表上部的查詢按鈕是集算報表提供的「引數模板」功能,具體做法參見教程,這裡不再贅述。

首先,要提前用集算器從資料庫中讀取2023年等各個年份的銷售資料,計算好之後,以集算器的二進位制編碼匯出到temp2009sales.b檔案中,每年乙個檔案。中間資料製作好之後,資料庫中2023年的資料就可以移除備份了,不再占用資料庫的空間。

第二,編寫集算器指令碼salesproportion.dfx如下:

注意,指令碼的引數是:argyear(要查詢的年份),argmonth(要查詢的月份)。

a1:連線預先配置好的資料來源demo。

a2:從資料庫中計算取出要查詢的年份訂單數、銷售額。

a3:從前一年的資料檔案中取出資料。

a4:將a3中的資料按照a2中的client欄位對齊,a2中有a3中沒有的補空行。

a5:利用a2來生成新的續表。其中增加了a4的對應行資料,比如a4(#).c:lastcount就是a4的對應行(#是a2的當前行號)中取出c欄位。

a6:關閉資料庫連線。

a7:向報表返回結果集。

第三,在集算報表中定義報表引數(argyear、argmonth)和計算資料集:

上圖中,引數名是指dfx定義的引數名稱,引數值是指報表提交給集算引擎的值。這裡是將報表的兩個引數的值傳遞給集算器的同名引數。

第四,設計報表,如下圖:

輸入引數計算後,即可得到前面希望的報表。

優化報表系統結構之報表server計算

在報表專案中,經常會碰到資料庫壓力非常大影響整個系統效能的問題。由以下的傳統方案的結構示意圖能夠看出。所有資料儲存和源資料計算都放在資料庫完畢。當併發訪問量較大的時候,儘管每乙個報表的資料量不大,還是會造成資料庫壓力過大。成為效能的瓶頸。多數資料庫廠商提供的jdbc介面資料傳輸比較緩慢。在併發量較大...

安裝 Power BI 報表伺服器

建議在安裝 power bi 報表伺服器之前先檢視安裝 power bi 報表伺服器所要滿足的硬體和軟體要求。power bi premium 如果已購買 power bi premium,則可以在 power bi 管理門戶的 premium 設定 選項卡中訪問 power bi 報表伺服器產品金...

報表應用結構優化之資料分庫儲存

報表專案中,可能會出現報表源資料來自於不同資料庫的情況。這是由於同一張報表可能會從多個業務系統取資料。比如 員工資訊從人力資源系統中取出,銷售資料從銷售系統中取出。另一種可能是,同一應用系統的資料庫負載太大,不得已分成多個資料庫的情況。比如 銷售系統資料分成當前庫和歷史庫。報表工具須要連線的可能是相...