润乾集算报表多样性数据源之动态SQL传递
大多數情況下報表的數據源SQL都是固定的,但有時也需要動態變動其中某些部分實現動態拼出,比如在報表應用中允許用戶通過選擇表和字段查詢自己關心的報表數據,報表開發時則希望對同類報表(明細或匯總)使用同一模板。這時就需要在報表中接收相應參數拼接出動態SQL進行查詢后制作動態報表。
潤乾集算報表提供了兩種處理動態SQL的方法,使用宏和集算腳本,可以快速完成這類報表,下面舉例說明。
使用宏
????集算報表提供了宏機制,通過在動態宏中拼接SQL后交由數據集查詢結果,最后在報表中使用動態表達式獲得字段名和字段值完成報表制作。步驟如下:
設置報表參數
? ? 應用中已經按照指定的參數格式將表名、字段名和查詢條件傳遞給報表,因而報表參數設置如下:
? ??其中cols值:訂單ID,客戶ID,訂購日期,發貨日期,到貨日期,運貨費;
? ??where值:where 貨主地區='華北' and 貨主城市 in ('北京','天津','張家口','秦皇島') 。
?
設置宏
? ? 其中值為:"select "+cols+" from 訂單"+where,宏類型為動態宏。
?
設置數據集
在數據集中引用上述定義好的動態宏。
?
編輯報表表達式
? ? ?由于報表列都是動態的,無法事先制作固定列的報表,需要使用動態列函數。
這里使用了ds.fname()和ds.field()函數實現動態列報表,具體用法可參考集算報表相關文檔。最后將輔助的A列和第一行隱藏即可完成報表制作。
????通過使用宏和報表的動態函數可以快速拼接出動態查詢SQL完成動態報表的制作,宏比較適合邏輯簡單的情況,如果拼接的SQL比較復雜,需要進行一定的計算,那么使用宏就比較困難了,這時候就需要使用集算腳本來完成。
使用集算腳本
? ? 在集算報表中,可以通過“集算器”數據集和“腳本數據集”來引入集算腳本實現動態SQL傳遞的目標,由于不涉及重用和過多的調試,這里直接使用腳本數據集完成。
集算腳本使得簡單拼接代碼就可以實現宏在數據源方面的作用。除此之外,腳本還能完成更復雜一些的運算,比如用戶在指定表和列時,有一些列是必選列,即使用戶沒有選擇,在查詢后仍然顯示,這就需要在拼接SQL的時候事先判斷必選列是否在用戶的選出列中,如果不在,則在后面添加,同時要保證用戶選出列的次序。
? ? 這里仍然查詢訂單表的數據,其中訂單ID、雇員ID和訂購日期為必選字段,使用腳本數據集完成可參考如下步驟:
?
設置報表參數
????與上面的例子類似,報表中仍然接收選擇列和條件參數。
? ? 其中cols值:訂單ID,客戶ID,訂購日期,發貨日期,到貨日期,運貨費 ;
? ? where值:where 貨主地區='華北' and 貨主城市 in ('北京','天津','張家口','秦皇島') 。
?
設置數據集
????使用腳本數據集編寫腳本進行SQL拼接和取數工作,并返回結果集。
? ? 使用集算腳本可以分步編寫計算邏輯,而且由于其對集合運算的良好支持使得在A2中將所選字段集合與必選字段集合做并集即可獲得所有查詢字段,非常簡單。其中:
? ? A1:所有必選字段的集合
? ??A2:將用戶選擇的字段集合與必選字段集合求并集,以保證保證所有必選字段都能選出
? ??A3-A4:執行拼接好的SQL取數
? ??A5:為報表返回結果集
?
設置報表表達式
報表表達式設置與前面使用宏中的設置一致,這里不再重復。
?
????在集算報表中提供的兩種處理動態SQL的方式可以很方便地完成類似的任務,宏適合只進行簡單替換的場景,而復雜的情況,需要一定計算才能得到最終的SQL語句的場景則需要使用集算腳本(腳本數據集),在實際業務中用戶可以根據情況進行選擇。
轉載于:https://blog.51cto.com/report5/1590714
總結
以上是生活随笔為你收集整理的润乾集算报表多样性数据源之动态SQL传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php二进制安全的含义
- 下一篇: RC6遥控协议