複雜報表設計之動態報表

xiaohuihui發表於2019-12-18

需求說明

imagepng

imagepng

如上圖所示,可以需選擇不同的分組維度進行資料分析,例如類別、供應商維度;
可以透過使用者輸入的引數值進行資料動態過濾,例如傳入不同供應商、類別的值進行資料查詢過濾;
可以選擇要顯示的附加欄位資料;
同時要求顯示有排名(每個分組內的資料從大到小顯示)、佔比(產品佔該分組維度總訂購量的百分比)。

製作過程:

1. 資料準備

此示例使用指令碼資料集完成資料的準備工作,此處使用指令碼資料集是處於對組內排名需求的考慮,完整指令碼配置如下圖所示:

imagepng

其中,
A1:使用 connect 函式連線 demo 資料來源
A2:使用 query 函式進行資料的過濾查詢
A3:使用 group 和 sort 函式實現組內排序效果,即排名結果

2. 主報表製作

imagepng

其中,
A2:=if(arg1==“供應商 ID”,ds1.group( 供應商 ID:1),ds1.group(類別 ID:1)) 實現動態分組效果
B2:=ds1.sum(訂購量) B 列為隱藏列,用於佔比的分母值計算
C2:=&D2 排名效果實現,此處使用組內序號的配置即可,資料集準備的資料中已完成排名計算
D2:=ds1.select(產品 ID) 明細資料的展現,跟隨 A2 不同的分組維度顯示產品明細
E2:=ds1. 訂購量 同一個資料集的 select 函式後面跟隨取值表示式,不需要再使用 select 函式取數
F2:=if(B2==0,“-”,E2/B2) 佔比的實現是除法,準備好分子和分母的資料即可,此處使用 if 對分母為 0 的資料做了特殊處理,顯示為“-”
G1:=split(arg4,“,”) 對傳入要附件顯示的列名進行拆分,需要設定 G1 單元格的擴充套件方式為橫向擴充套件
G2:=ds1.field(G1) 使用 field 函式對該欄位進行取數顯示

主表設計完成,儲存報表,例如儲存名稱為:kehu1.rpx,我們可以透過設計器的預覽按鈕看下效果:

imagepng

輸入引數值後,得到如下結果:
imagepng

3. 引數模板設計

imagepng

檔案–新建報表,設定報表屬性中的報表型別為:引數模板
繪製上圖所示的表樣
其中,
B2:編輯風格為下拉選單,並設定 web 變數名為 arg1

imagepng

D2:編輯風格為下拉資料集,並設定 web 變數名為 arg2

imagepng
此 ds1 資料集需在引數模板的 報表–資料集中進行定義

F2:編輯風格為下拉資料集,並設定 web 變數名為 arg3
B3:編輯風格為下拉選單,並設定 web 變數名為 arg4

最後,將引數模板儲存為主表名稱 _arg.rpx,此示例名稱為 kehu1_arg.rpx

至此,整體效果已完成設定。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2669163/,如需轉載,請註明出處,否則將追究法律責任。

相關文章