報表中某列對應的字段動態改變

 

最近在幫助客戶解決技術問題的時候,遇到一個這樣的需求,客戶從數據集中選出的字段是通過宏動態改變的,而報表中的某個列所對應的字段也是動態改變的,這種需求在報表中直接實現不是很方便,下面就用動態宏和動態參數來實現這個需求。
第一步,新建一張報表,連接demo數據源。
新建一張空白的報表,這個報表的數據集有些特殊,裏面的sql不是直接寫字段的,而是用到了宏,這樣做可以根據自己的需要,設定需要的字段,sql爲:SELECT 訂單.訂單ID,${macro1} FROM 訂單 ,而宏macro1爲:訂單.訂購日期,訂單.貨主名稱,訂單.貨主地區,訂單.貨主地址,訂單.貨主城市,這個宏是普通宏。
報表的樣式和宏的寫法如下圖所示:

 

第二步:寫動態宏,實現列動態顯示某個字段。
新建一個參數agr1,arg1的內容與宏macro1相同,內容爲:訂單.訂購日期,訂單.貨主名稱,訂單.貨主地區,訂單.貨主地址,訂單.貨主城市,參數的類型爲普通參數。然後再新建一個動態宏,名字爲macro2,宏的內容爲:“ds1.”+mid(valueat(@arg1,2),3),這個宏的作用是動態取宏macro1的某字符串(也就是數據庫裏面的字段),然後在報表中展現出來。
其中valueat()函數的作用是截取到參數arg1某個位置的字符串(字段),如valueat(@arg1,2)取到的內容就是訂單.貨主地區,而valueat(@arg1,0)取到的就是訂單.訂購日期。
而mid()函數的作用是去掉字段前面的“訂單.”,只有去掉這個內容報表才能正確解析出字段的內容,否則報表會把“訂單.”解析成一個數據集函數,從而產生錯誤。
宏macro2的內容如下圖所示:

 

 

 

 

第三步:在報表中使用宏macro2。
在B1單元格中寫入${macro2},具體的報表樣式如下圖所示:

 

 

點擊瀏覽報表,就可以看到如下的內容了:

 

然後我們修改宏macro2的內容爲:“ds1.”+mid(valueat(@arg1,1),3),然後瀏覽報表,可以看到如下結果:

 

 

 

這樣在報表中的某個列所對應的字段能夠動態改變的需求就實現了,這樣做可以使報表更加靈活,一張報表模板可以根據不同的需求展現不同的,報表數據集取數也更加靈活,不必將字段寫死也不必將所有字段全部取出。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章