java薪资年龄交叉表_巧用参数实现交叉表行列互换
對于普通的沒有olap分析功能的快逸報表而言,一旦發布到web頁面后,其樣式就被固定了,如果想把報表換種形式展現通常的做法是重新設計一張報表模板來實現,難道快逸報表就沒有一種特殊的方法可以解決這樣的需求嗎?答案就在下面的例子中。
首先來看這樣一張報表(quieeReport\webapps\quiee\reportFiles\基礎報表\交叉報表.raq),在頁面上的展現效果如下圖:
從上圖可以看到這是一個多維交叉分組報表,上表頭是地區/城市,左表頭是日期。
如果想動態改變一下報表的樣式,左表頭變成地區和城市的分組展現,上表頭變成年份和月份的分組展現,并且只通過一張報表,這就需要用文章標題中提到的:利用參數實現行列變換的方法了。
實現思路:
1. 設計單元格表達式根據參數不同而變化,從而實現樣式跟隨表達式變動。
2.點擊一個超鏈接按鈕通過url強制傳參給報表中的單元格,從而控制報表的樣式。
本文就以此報表為礎,做一個可以行列互換的功能(上表頭和左表頭互換),實現報表在web頁面上樣式改變。
第一步:設計器中選擇配置–參數
給報表增加一個參數,我們把這個參數叫做轉換參數,顧名思義,這個參數就是控制行列轉換用的。
第二步:修改單元格表達式,讓單元格接受參數
我們把C2單元格的表達式修改為:
=if(@arg1==’1′,ds1.group(year(訂購日期),false,訂購日期!=null)+”年”,ds1.group(貨主地區,false,貨主地區!=null))。
此表達式的意思是:當參數arg1的值為1時,C2單元格的表達式為ds1.group(year(訂購日期),false,訂購日期!=null)+”年”,否則默認為ds1.group(貨主地區,false,貨主地區!=null)。
關于快逸報表中if()函數的用法請參考快逸幫助文檔中的相關介紹。
據這個邏輯,依照地區與城市之間的關系,年份和月份之間的關系,把單元格的表達式做如下修改:
C3:=if(@arg1==’1′,ds1.group(month(訂購日期),false)+”月”,ds1.group(貨主城市,false))
A4:=if(@arg1==’1′,ds1.group(貨主地區,false,貨主地區!=null),ds1.group(year(訂購日期),false,訂購日期!=null)+”年”),
B4:=if(@arg1==’1′,ds1.group(貨主城市,false),ds1.group(month(訂購日期),false)+”月”)。
第三步:修改交叉表頭并在其中設置超鏈接
紅色框中的交叉表頭區是整張報表的關鍵,既要在行列轉換的時候做到文字跟隨變化,又要充當轉換控制的按鈕。
修改此單元格的表達式為:=if(@arg1==’1′,”分布,運貨費,時間”,”時間,運貨費,分布”)
然后在此單元格的屬性中:
加入超鏈接屬性:
if(@arg1==null,”/reportJsp/showReport.jsp?raq=/交叉報表.raq&arg1=1″,”/reportJsp/showReport.jsp?raq=/交叉報表.raq”)
這個超鏈接的作用就是點擊這個單元格,賦予arg參數值,然后通過超鏈接中的url把參數傳遞到jsp中的報表里,通過對參數值的判斷,來確定超鏈接中的url,這樣就可以來回轉換,防止只能轉換一次的情況出現。(超鏈接也可以設置在其他單元格中,本文中這樣做是為了美觀且容易理解)
接下來,我們把報表發布到頁面上去看效果:
點擊設置了超鏈接的表頭單元格后,url自動轉換為/reportJsp/showReport.jsp?raq=/交叉報表.raq&arg1=1,強制把參數arg=1傳給報表的各個單元格,單元格表達式發生變化,報表樣式也隨之變化,于是實現了行列互換的效果:
此時,如果想轉換到前一種樣式,只需再點擊一次表頭單元格即可。
在這個報表中,我們運用了很多頗具技巧性的方法,例如參數結合超鏈接的運用,if()函數的運用,往往一些看似很復雜的報表,通過一些技巧性的做法都是可以迎刃而解的。
總結
以上是生活随笔為你收集整理的java薪资年龄交叉表_巧用参数实现交叉表行列互换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动设备如何当作FL Studio中的M
- 下一篇: 电脑技巧:Win10自带远程控制软件介绍