首先~讓我嘆N口氣後再說~水晶報表真是一個無言的產品...
它把grouping的東西當迴圈的概念做進來,把RAW data用resultSet一樣只能next的一筆筆抓偶也接受,是還好沒什麼意見,但是在報表中,底下的小統計分析明明就是很常見的放置做法~口訴它居然沒有提供直接的方式來做就是讓人覺得不爽~
然後偶同事跟我說再去DB做個subquery...這個解法也真是挺爛的~因為這個小型統計硬要query的話~要查個N百次才查得完~而且他一次又要撈很多表一定超慢的~要是可以在Java的作法上,只要把RAW Data丟進Map/SortedMap做分類~ 再撈出來統計數字~用用memory就可以解決的小問題(因為這個list量也還好一般,不會讓list的size爆掉,只是它join不少的table和長長一大串的where而已~)~
總之~因為在google上一時找不到解法,所以就想了個很爛的方式解套先Orz...
先以sql的概念來說~其實不過就是想實現
select count(AAA), AAA from tbl_XXX
group by AAA
這麼簡單的問題><~但是為啥會搞得這麼複雜呢!?
報表的設計配置示意如下:
群組首#1 (隱藏但可計)@group_reset
群組首#2 (隱藏但可計)
細目 (顯示)
群組尾#2 (隱藏但可計) #group_count @group_set
群組尾#1 (顯示) @group_show_name @group_show_cnt
先設定累計項目(#group_count)為,計算群組2的項目筆數,記得要在群組變更時reset,就可以得到 該首#2的個數累計。
其實若把隱藏的都show出來,就可以得到對的數據了(只是排版不一樣Orz...為啥咪只是想把原本在"群組尾#2"的項目全部擺在同一區會這麼血淚...)~
因為user是想要先看完明細後才看小計~為了這個排版搞死人一_一"...
報表的邏輯~我看是像resultset next的作法一樣,跑過就不見~擺在那就只能看到最後一筆,所以乾脆做變數來把他都先接起來,然後最後再一起顯示~
變數採用名稱跟數量分開~是為了結果排版好看啦XD...
還有要記得一起換行(文字模式用 Chr(13)+Chr(10) )!!這樣才會對齊~
ToText({#group_count}, 0)-->統計會自帶小數點,讓它變整數~
@group_reset 清空變數
Shared stringVar groupDisplay := '';
Shared stringVar groupDisplayCnt := '';
@group_set 把資訊保存
Shared stringVar groupDisplay;
Shared stringVar groupDisplayCnt;
groupDisplay := groupDisplay +Chr(13)+Chr(10)+ GroupName ({@XXX}) ;
groupDisplayCnt := groupDisplayCnt +Chr(13)+Chr(10)+ ToText({#group_count}, 0) ;
@group_show_name
Shared stringVar groupDisplay;
stringVar output := groupDisplay;
output;
沒有留言:
張貼留言