上一個專題講了報表資料運算原理方面的取捨。一個報表是由行和列組合而成的,因而一定要從報表運算原理上達到行和列方向上計算模式是一樣的才好。即行列對稱。不能象條帶狀報表工具一樣,在行方向上的計算能力大大強於列方向上的計算能力。最好讓行與列方向上的計算是統一的,不要為列方向上設立特定的交叉表計算模式。實際上交叉表即是列方向上的分組報表而已。一個行列對稱的web報表工具就不用專門考慮如何做交叉表了,只要將分組報表做好,交叉表也就做好了。所以本專題將深入地探究一下報表的分組問題。
資料分組,就是相同值放在一起。比如按部門分組,就是將部門欄位相同的記錄放在一起。對於標準的分組比較簡單,因為SQL語句中就提供GROUP命令。但現實中有時會有一些不規則分組的情況。下面列舉一下:
1 隨機分成多個區間,比如年齡欄位分成:0到15,15到30,30到40,40到50,50以上。
如所示:
當然這種分成多個區間的情況也可以通過寫複雜的SQL語句來實現,考慮到SQL語句還要實現其它一些邏輯,所以這樣的話會大大的加大寫SQL語句的工作量。實際上這種分多個區間的不規則分組還是有些規律的。所以最好還是象e表這樣專門做一個函數來解決這種情況比較好。下面列出這個函數的說明:
scope
函數說明:
根據完全劃分進行分組
文法:
datasetName.scope( selectExp, listExp[, filterExp][, eqExp][, ascExp] )
參數說明:
selectExp 取值運算式
ListExp 返回同valueExp資料類型相同的數組,要求其中元素從小到大排列
filterExp 過濾運算式
eqExp 返回布爾值的運算式,預設為false,表示與元素比較時不包含等於
ascExp 返回布爾值的運算式,預設為true,表示listExp返回的數組按從小到大排,否則為從大到小排
特別說明:
ascExp為true(即listExp從小到大排列)時,eqExp為true時,與元素比較時採用<=,eqExp為false時,採用<;
ascExp為false(即listExp從大到小排列)時,eqExp為true時,與元素比較時採用>=,eqExp為false時,採用>
樣本:
ds1.scope(age,[15,30,40,50])
2 前面枚舉幾個固定值,最後來一個其它。比如產品分組為:CPU,記憶體,硬碟,其它。即其它類中的內容為除CPU,記憶體,硬碟這三個之外的所有內容。這也是中國式報表中的一種常見的不規則分組。
3 地區分組時,象這樣:北京,河北,山東,其中:青島,江西。即在山東後面要加上一個青島,其它都是正常的分組。如所示:
加一個青島後可就比較麻煩了。往往會被迫要寫程式來準備特定的資料集來實現。e表是如何在不用寫代碼的情況下解決此問題的呢?
e表內部有一個內建資料集的工具,有人往大了說它是一個小資料庫。實際上只是一個簡單的編輯表資料的工具而已。最早設計內建資料集的初衷是為了方便自己做e表的支援人員,因為有它後,使用者只需要將一個出了錯的報表檔案發給我們,我們就可以在e表中開啟並運行它。而不需要使用者把資料庫發給我們。後來發現內建資料集可以作資料詞典用,正好可以相對簡單(不用編程)地解決這個問題。即只要將 北京,河北,山東,其中:青島,江西 作成一個資料詞典,儲存在內建資料集中即可解決此問題。
在上一個專題中重點分析了資料集中的資料應如何在靜態報表上展開。在展開後,往往還應能在報表上找到哪些展開了的資料,以便進行再計算。這一階段的報表運算中最典型的部分就是跨行組運算了。
跨行組運算,直觀來理解就是跨行(指記錄行)或跨組(指分組的組,一個資料集的所有記錄合起來也可認為是一個組)的運算了。下面來詳細說明一下:
跨行運算,即需要取到別的記錄行的資料,典型例子是要取上一記錄行的資料。比如:財務軟體中常有的當前行的餘額等於上一行的餘額+本行的借方金額-本行的貸方金額。即累積運算。如所示:
其中累積金額列應等於上一行的累積金額加上本行的合約金額。要實現此累積運算,只需要設定公式為:E3公式 = D3+E3[-1] //其中 E3[-1] 表示取E3擴充出的上一行的儲存格的值,是儲存格的擴充座標中相對座標的概念。
跨組運算,在多級分組的情況下,常常需要取得某一級下的當前組的儲存格集合來進行計算。如計算排名,佔比,上期比同期比等等。為上期比同期比的樣本。
想詳細看看本文的報表示例的朋友可以到北京方成公司的網站上線上試用或下載到本地試用。
總結:
本專題主要講了講報表資料運算的後續部分,即不規則分組和跨行組運算。在下一專題中,將講一些輕鬆的話題。下周一將發布web報表開發技術專題四:開發報表設計師的背後故事。
相關連結:
[原創]web報表開發技術專題一:序號問題
[原創]web報表開發技術專題二:報表工具的核心---資料集的變換
web報表工具的製表效率分析