A
1
=${pds}.query("select * from T where F=?",pF)
數據源名稱用參數pds進來,報表工具本身不必支持動態多數據源了。 類似地,有些報表工具要求主子報表必須用同一個數據源,當需要主子報表用不同數據源時,也可以采用這個辦法,把集算器作為主子報表的共同數據源,而實際數據源在集算腳本中根據參數決定。 動態數據集 報表工具中,報表參數通常會用作數據集選出條件的參數,也就是SQL的參數。但有時我們需要替換SQL的一部分而不能只用參數,比如整個WHERE部分是作為參數傳入的,這樣可能獲得更靈活的查詢條件。 某些報表工具支持宏,可以做到這一點。對於不支持宏的報表工具,就只能再使用報表工具提供的API用代碼去改寫報表模板的數據集定義,相當繁瑣。用集算器就很簡單:
A
1
="select * from T" + if(where!=""," where "+where,"")
拼上where,空則不拼
2
=db.query(A1)
即使支持宏的報表工具,有些SQL也不易拼出。比如希望按傳入的字段列表做合計,就要在這些字段上拼加sum(),而報表工具通常沒有直接變換串的手段,又必須使用API去處理,或者在上層事先拼好。這時用集算器也都很容易處理。
A
1
=sums.array().("sum("+~+") as "+~).string()
把a,b變成sum(a) as a,sum(b) as b
2
=db.query("select G,"+A1+" from T group by G")
取數限制 由於容量有量,我們要求報表最多取出10000行數據,如果沒有取完要再補一行標記有“繼續”的記錄,這樣可以顯示出數據是否完整。但報表工具通常只能執行確定的取數語句,這種靈活控制又需要復雜代碼調用API來實現。 集算器用代碼控制這個過程很輕松:
A
B
1
=db.cursor("select * from T")
=A1.fetch(1000)
2
if A1.fetch@0(1)
>B1.insert(0,"繼續")
未完成則插入標記
3
>A1.close()
return B1