中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

BIRT中怎么根據參數動態拼接SQL

發布時間:2022-01-15 16:02:57 來源:億速云 閱讀:130 作者:柒染 欄目:互聯網科技

這篇文章的內容主要圍繞BIRT中怎么根據參數動態拼接SQL進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

BIRT可以使用sql query來創建數據集,通過在報表中設置參數(Parameter)來傳遞客戶端的用戶輸入,同時可以設置Dataset參數并且與報表參數關聯(這兩個參數是不同的),這樣可以將客戶端的用戶輸入傳遞給Dataset的參數供sql query的where語句使用,這是通常的創建sql語句的做法,但是這種方法只適合固定的sql語句,對于拼接動態的sql就不適用了。

比如要處理這么個場景:根據傳入的用戶名、起止日期,分級別查詢出不同的訂單信息。author存儲用戶部門信息,account存儲賬目信息(多個用戶可歸屬于一個賬目,以逗號分隔),META存儲訂單明細。示意圖如下:

BIRT中怎么根據參數動態拼接SQL

1、傳入登錄參數login_user,判斷部門級別

2、當級別為manager,需提前獲取當前賬目

3、當部門為admin,統計所有賬目、用戶銷售額

4、當部門為manager,統計當前賬目下所屬的用戶銷售額

5、當部門為engineer,只統計自己銷售額

BIRT可以通過一個間接的方式來實現:在DataSet的Script頁簽下選擇beforeOpen事件,通過編寫JS腳本來動態拼接SQL,類似代碼如下:

...

var query = "select ITEMS,USERS,sum(AMOUNT) as TOTALAMOUNT from META where ORDERDATE>=? and ORDERDATE<=?";

var user = reportContext.getParameterValue("login_user");

...

if(flag == "admin"){

        ...

        query += " group by ITEMS,USERS";  

}else if(flag == "manager"){

        ...

        query += "and ITEMS ='"+ account +"'";

        query += " group by ITEMS,USERS";

}else{

        ...

        query += " and  USERS = '" + login_user + "'";

        query += " group by ITEMS,USERS";

}

this.queryText = query;

...

這種硬編碼的方式會造成計算邏輯與展現之間耦合度過高,要么需要大量修改報表文件,要么需要每個報表繼承一個公共的庫文件,代碼寫起來非常復雜,在報表數量、開發人數較多時,難以管理、修改和維護。

更好的方式是引入一個顯式的數據計算層,在其中提供可解釋執行的腳本功能,把數據源計算獨立出來(所有的業務邏輯判斷和批量數據計算都放在這一層,最后將計算結果直接返回給BIRT的DataSet進行報表展現即可)。

集算器就是這么個數據計算中間件,它提供豐富的結構化數據集運算功能,可以很方便地實現批量數據計算和各類動態SQL拼接。比如上面的問題,集算器SPL代碼則非常簡單且直觀:


A

B

1

=connect("myDB")

=sql="\"select ITEMS,USERS,sum(AMOUNT) as TOTALAMOUNT from META where ORDERDATE>=? and ORDERDATE<=?"

2

=flag=A1.query("select dept from author where userid=?",login_user).dept

3

if flag=="admin"

>B1=concat(sql,"group by ITEMS,USERS\"")

4

else if flag=="manager"

>B1=concat(sql,"and ITEMS='",A1.query("select accountid from account where find_in_set(?,limits)",login_user).accountid,“'  group by ITEMS,USERS\"")

5

else

>B1=concat(sql,"and USERS='",login_user,"' group by ITEMS,USERS\"")

6

=A1.query@x(${B1},startdate,enddate)

感謝你的閱讀,相信你對“BIRT中怎么根據參數動態拼接SQL”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭通市| 怀宁县| 六枝特区| 建德市| 灵宝市| 信丰县| 崇文区| 南充市| 宿松县| 水富县| 辽阳县| 横峰县| 冕宁县| 德格县| 东乡族自治县| 永安市| 兴业县| 喀什市| 乐都县| 白银市| 河西区| 乳源| 沙河市| 昔阳县| 台东市| 米泉市| 渝中区| 临沭县| 河曲县| 张掖市| 舞钢市| 阳泉市| 柳江县| 新绛县| 凭祥市| 阿荣旗| 百色市| 巴楚县| 大名县| 阜新市| 邻水|