報表工具對比選型系列用例——排名及跨行組統(tǒng)計

繼《多源分片報表》后,我們繼續(xù)考察這些報表工具對復雜報表的支持程度曼库。

排名與跨行組運算也是典型的中國復雜報表形式晶默,這類報表的源數(shù)據(jù)集通常比較簡單矛洞,但在表格的單元格之間會有較隨意的計算要求微姊。在制作報表時酸茴,單元格還沒有擴展出來,因而不能像 Excel 那樣直接引用單元格名字兢交,報表工具需要提供某種機制允許在表達式中引用還沒有產(chǎn)生的單元格薪捍。

用例說明

報表式樣

數(shù)據(jù)結(jié)構(gòu)

[學生成績表]

學生成績表中存儲各班級同學歷年語文、數(shù)學、語文成績信息

特點分析:

1酪穿、 報表中根據(jù)學生成績既要做班級內(nèi)排名与倡,又要做年級內(nèi)排名。

2昆稿、 報表中要列出去年班級內(nèi)的名次,以用來展示該同學本學期較上學期的名次變化息拜。

3溉潭、 要求統(tǒng)計出各班級內(nèi)前三名的學號。

4少欺、 要求統(tǒng)計出各班級內(nèi)名次較上學期上升最快的三位同學的學號喳瓣。

關(guān)于工作量的評估,我們?nèi)约俣ㄊ褂谜呤煜は鄳膱蟊砉ぞ咴薇穑⒅挥涗泴嶋H的制作和正常調(diào)試的時間畏陕,不包括查閱產(chǎn)品函數(shù)資料的時間。

潤乾報表

制作過程:

1仿滔、 配置并連接數(shù)據(jù)源惠毁。

2、 設置參數(shù)及數(shù)據(jù)集

2.1 此報表要求查詢出相應年度的學生成績崎页,所以需要通過傳入?yún)?shù)控制具體展示哪年數(shù)據(jù)鞠绰,報表中增加參數(shù),參數(shù)名為 nd飒焦。

2.2 報表中既要統(tǒng)計所選年度數(shù)據(jù)蜈膨,還需要和去年數(shù)據(jù)做比較,所以報表中要取出兩年數(shù)據(jù)牺荠,這里為了方便制作和理解翁巍,建立兩個數(shù)據(jù)集,分別取出兩年數(shù)據(jù)休雌,如:

ds1(取今年數(shù)據(jù)):

對應傳入?yún)?shù)設置:

ds2(取去年數(shù)據(jù))

數(shù)據(jù)集語法為 select * from xscj where nd=?

對應傳入?yún)?shù)為:nd-1

兩個數(shù)據(jù)集 SQL 語句完全一樣灶壶,用 ? 代替變量,然后在參數(shù)中設置 ? 具體傳入值杈曲,潤乾在傳入?yún)?shù)這不僅可以直接寫入?yún)?shù)例朱,也可以寫入表達式先進行計算。

3鱼蝉、 設計報表模板

這個報表從展現(xiàn)形式上來看是一個分組報表洒嗤,按照年級分組,列出各班級同學的成績魁亦、排名等信息渔隶,然后在每個班級下再增加對應的匯總信息,下面介紹下主要單元格設置情況:

3.1、 A 列到 F 列單元格间唉,都是普通的分組绞灼、取數(shù)等,按照常規(guī)設置就行, 其中 A3 單元格中呈野,數(shù)據(jù)庫里存儲的是 1低矮,2,3被冒,4 這種數(shù)字格式军掂,顯示值表達式中寫入:chn(int(value()))+“班”,將數(shù)字轉(zhuǎn)換成中文

3.2昨悼、 G3 格:=count(F3[A3]{F3>$F3})+1蝗锥,取出班級內(nèi)的排名,潤乾提供了排名計算方法率触,統(tǒng)計當前班級內(nèi)成績大于當前這人成績的人員個數(shù)终议,然后再加 1,就是當前這個人的排名葱蝗。

3.3穴张、 H3 格:

,前邊單元格統(tǒng)計了班級內(nèi)排名两曼,這個單元格中要統(tǒng)計整個年級的排名情況陆馁,表達式同 G3 類似,只不過 G3 中對 F3 計數(shù)時加了 [A3], 也就是表示取當年班級內(nèi)的成績排名合愈,此處是 [`0]叮贩,取所有成績排名,這是潤乾特有的層次坐標表示法佛析,可以引用各個分組層次的單元格(及集合)益老。

3.4、 I3 格:=ds2.select(YUWEN+YINGYU+SHUXUE,bj==A3 && studentid==B3)寸莫,因為報表中要列出去年的排名钧惧,所以這里要取出去年的總分情況蕊肥,此列是輔助單元格语稠,然后將這列隱藏掉就行脚草。

3.5、 J3 格:=count(I3[A3]{I3>$I3})+1披坏,去年成績排名态坦,一樣的做法

3.6、 B4~K4棒拂,是個合并單元格伞梯,表達式:=disp(A3)+“成績前三名同學是:”+B3{G3==1}+“,”+B3{G3==2}+“,”+B3{G3==3}玫氢,A3 單元格在數(shù)據(jù)庫中存儲的是 1,2谜诫,3 這種形式漾峡,用 disp 函數(shù)取這個單元格的顯示值,學號在 B3 單元格喻旷,在 G3 單元格中已經(jīng)算出了排名生逸,所以可以根據(jù)排名來獲取對應的數(shù)據(jù),B3{G3==1} 這個表達式表示取 G3 等于 1 的 B3 單元格的值且预,這樣就取出了第一名的學號槽袄,后邊兩個同樣的做法。

3.7辣之、 B5~K5,合并單元格皱炉,表達式:=“班級名次上升最快的三位同學是:”+string(esproc(“?.m(?.ptop(-3))”,B3{},K3{}))怀估,這個單元格要求取出名次上升最快的三位同學,有多種做法合搅,可以像排名那樣多搀,先對名次變化幅度做個排名,然后再根據(jù)幅度排名獲取前三位灾部,但是這種做法要增加輔助單元格康铭。這里采用了另一做法,使用潤乾內(nèi)置函數(shù) esproc赌髓,將 K3 單元格(名次變化幅度)傳入,ptop(-3) 取最大的 3 位的位置从藤,然后用 m() 函數(shù)根據(jù)位置取對應的姓名。esproc 函數(shù)允許在報表中引用潤乾集算器的表達式锁蠕,能組合出更為復雜豐富的運算 夷野。

運行結(jié)果

need-to-insert-img

完成后點評

1、 用時 1 小時荣倾。報表主要難點排名悯搔、匯總統(tǒng)計等都用內(nèi)置的函數(shù)或者特定的做法就行。

2舌仍、 函數(shù)功能強妒貌,像排名時用到的 count 函數(shù),統(tǒng)計分析時的 esproc 函數(shù)等铸豁,只需要幾個函數(shù)或者特定的語法就能夠完成一些比較復雜的需求灌曙。

3、 底層模型強节芥,潤乾報表模型中提供了完善的層次坐標引用機制平匈,對于排名計算中會涉及到跨行組之間的計算,直接用特定的語法就行,以及取班級前三名時增炭,B3{G3==1}忍燥,可以根據(jù)已有排名直接獲取對應的數(shù)據(jù)。

4隙姿、 關(guān)聯(lián)簡單梅垄,比如這個報表要求取去年數(shù)據(jù),為了簡單起見输玷,直接新建了個取去年數(shù)據(jù)的數(shù)據(jù)集队丝,在報表中通過字段能直接將兩個數(shù)據(jù)集數(shù)據(jù)關(guān)聯(lián)在一起,這樣制作起來比較方便欲鹏,也比較易于理解机久。

帆軟報表

制作過程:

1、 配置并連接數(shù)據(jù)源赔嚎。

2膘盖、 設置參數(shù)及數(shù)據(jù)集

2.1、 參數(shù)設置尤误,增加模板參數(shù) p1, 參數(shù)類型為字符串侠畔,默認值為 2019.

2.2、 數(shù)據(jù)集設置损晤,拖拽數(shù)據(jù)庫表生成基礎(chǔ) sql, 添加 where 條件软棺,其中數(shù)據(jù)集中引用參數(shù)使用參數(shù)名,ds1:SELECT?FROMDEMO.XSCJwherend=參數(shù)名尤勋,ds1:SELECT?FROMDEMO.XSCJwherend={參數(shù)名}喘落,ds1:SELECT * FROM DEMO.XSCJ where nd={p1}, 算出參數(shù)對應年份的成績信息。

2.3最冰、 ds2:SELECT bj,studentid,yuwen+shuxue+yingyu zf,nd FROM DEMO.XSCJ where nd=${p1}-1揖盘,算出參數(shù)對應去年的成績。

3锌奴、 設計報表模板

3.1 A3 單元格顯示班級名稱兽狭,數(shù)據(jù)庫表該字段值是 1,2,3,4 這樣的數(shù)據(jù),需要設置公式形態(tài) NUMTO(TOINTEGER($$$),true)+"班" 來達到效果鹿蜀。

3.2 G3 單元格的公式為:=count(F3[!0;!0]{A3 =A3?&&?F3?>A3?&&?F3?>A3 && F3 > F3}) + 1箕慧。

3.3 H3 單元格計算年級排名,單元格的公式為 =count(F3[!0;!0]{F3 >= $F3}) + 1茴恰。

3.4 在 I3 單元格中通過另一個數(shù)據(jù)集 ds2 取到對應去年的成績颠焦,在高級中增加關(guān)聯(lián)條件:(列名:BJ) 等于 ‘A3’ and (列名:STUDENGID) 等于 ‘B3’。

3.5 在 J3 單元格根據(jù) I3 的去年成績進行排名往枣,公式為:=count(I3[!0;!0]{A3 =A3?&&?I3?>A3?&&?I3?>A3 && I3 > I3}) + 1伐庭。

3.6 在 B4 單元格里要動態(tài)顯示對應每個班級的名稱粉渠,帆軟中沒找到引用其他格子顯示值的方法,所以在 B3 單元格表達式中為了得到 1 對應的大寫一圾另,表達式中又寫了遍 NUMTO(TOINTEGER(A3,true))+“班成績前三名同學學號是:”+B3{G3==1}+“,”+B3{G3==2}+“,”+B3{G3==3}霸株。

3.7 為了能在 C5 格子得到名次上升最快的三位同學學號,增加了輔助列 L3集乔,L3 的單元格表達式為:=count(K3[!0;!0]{A3 =A3?&&?K3?>A3?&&?K3?>A3 && K3 > K3}) + 1去件,先對每班的名次變化排了個名,然后對應取到排名為 1,2,3 的學生學號扰路,C5 的單元格表達式為:NUMTO(TOINTEGER(A3,true))+“班班級名次上升最快的三位同學學號是:”+B3{L3==1}+“,”+B3{L3==2}+“,”+B3{L3==3}尤溜。

報表結(jié)果

need-to-insert-img

完成后點評

1、 用時 1 小時左右汗唱。

2宫莱、 設計思路、操作過程哩罪、工具使用等大多數(shù)方法和潤乾基本一致授霸,這里就不一一細說了。

3识椰、 帆軟沒有類似潤乾 esproc 的函數(shù)绝葡,做名次上升最快的統(tǒng)計時深碱,就需要通過增加輔助隱藏列來計算名次變化腹鹉,增加了額外資源的耗用和開發(fā)工作量,當然本例單元格不多敷硅,影響不大功咒。

4、 姓名列排序默認是按照 ASCII 排序绞蹦,并不是按照常規(guī)的首字母方式力奋,要按首字母排序要用 StringPinyin() 函數(shù)轉(zhuǎn)換下,而且發(fā)現(xiàn)一般最后兩個人的排序顛倒了幽七,前兩個文字的相同景殷,最后一個帆(fan)應該在菲(fei)前邊,這個暫時沒找到原因澡屡。

Smartbi

制作過程

1猿挚、 配置并連接數(shù)據(jù)源。

2驶鹉、 設置參數(shù)及數(shù)據(jù)集

2.1绩蜻、 增加‘’年度”參數(shù),參數(shù)名為 nianfen室埋。

2.2办绝、 準備數(shù)據(jù)集

因為要同時查去年成績作對比伊约,所以這里準備兩個數(shù)據(jù)集(當年成績、去年成績孕蝉、班級轉(zhuǎn)換字典表)屡律。

采用原生 SQL 數(shù)據(jù)集

當年成績:

need-to-insert-img

去年成績:

need-to-insert-img

班級在數(shù)據(jù)庫中存儲的是 1,2,3,4 這種,想顯示成中文班級需要創(chuàng)建一個中文字典表數(shù)據(jù)集昔驱,數(shù)據(jù)結(jié)構(gòu)如下:

數(shù)據(jù)集中直接用 SQL 語句:select * from bj 疹尾。

3、 設計報表模板

報表的設計在 excel 內(nèi)完成骤肛,借助豐富的 excel 函數(shù)纳本,smartbi 解決這種格間運算也不是太麻煩。如幾個關(guān)鍵計算:

3.1 A5 單元格借助“轉(zhuǎn)換規(guī)則”將 A5 中的班級通過班級的中文字典表轉(zhuǎn)換成中文的班級名字腋颠。

3.2 班級排名(組內(nèi)排序)G5:=RANK(F5,SSR_GetSubCells(F5,A5)) 繁成,excel 的 RANK 函數(shù)和 smartbi 自身函數(shù)結(jié)合。

3.3 年級排名(組外或總排序)I5:=RANK(F5,(SSR_GetSubCells(F5)))

3.4 去年班級排名(組內(nèi)排序)J5:與 G5 同理淑玫,只不過去年總分不需要顯示巾腕,H 列為隱藏列

3.5 另外是班級前三及進步最快的學生,這個也可以實現(xiàn)絮蒿,方法都是 excel 函數(shù)與 smartbi 函數(shù)的結(jié)合尊搬,不過寫起來有點長。班級前三(B6):=A5&“成績前三名同學學號是:”&INDEX(SSR_GetSubCells(B5,A5),MATCH(1,SSR_GetSubCells(G5,A5),0))&“,”&INDEX(SSR_GetSubCells(B5,A5),MATCH(2,SSR_GetSubCells(G5,A5),0))&“,”&INDEX(SSR_GetSubCells(B5,A5),MATCH(3,SSR_GetSubCells(G5,A5),0))

3.6 進步前三(B7):=“班級名次上升最快的三位同學學號是:”&INDEX(SSR_GetSubCells(B5,A5),MATCH(LARGE(SSR_GetSubCells(K5,A5),1),SSR_GetSubCells(K5,A5),0))&“,”&INDEX(SSR_GetSubCells(B5,A5),MATCH(LARGE(SSR_GetSubCells(K5,A5),2),SSR_GetSubCells(K5,A5),0))&“,”&INDEX(SSR_GetSubCells(B5,A5),MATCH(LARGE(SSR_GetSubCells(K5,A5),3),SSR_GetSubCells(K5,A5),0))

運行結(jié)果

need-to-insert-img

完成后點評:

1土涝、 用時:兩小時左右佛寿,Smartbi 在 excel 中進行報表開發(fā),比較符合常規(guī)使用習慣但壮。

2冀泻、 完全在 excel 中操作,容易上手蜡饵,操作起來比較方便弹渔。excel 函數(shù)豐富,這個報表主要是其查找類函數(shù)的使用溯祸。

3肢专、 沒有真實值和顯示值的分類,在處理數(shù)據(jù)表的 bj(班級焦辅,數(shù)據(jù)為 1博杖、2 等數(shù)值)字段以“一班”等形式呈現(xiàn)的時候,需要借助“轉(zhuǎn)換規(guī)則”氨鹏,先建轉(zhuǎn)換規(guī)則欧募,然后給業(yè)務數(shù)據(jù)集的字段選擇規(guī)則,然后單元格屬性勾選“使用顯示值”這個東西是系統(tǒng)配置仆抵,也就是需要系統(tǒng)功能配合才能做到 ID 反顯名稱跟继。

4种冬、 提供有按層次訪問單元格集合的機制,但層次坐標體系沒有潤乾和帆軟做得簡單舔糖,可以引用指定位置的單元格娱两,但很麻煩,導致在做前三名統(tǒng)計時,表達式有點復雜旱物。

永洪 BI

制作過程:

1、 配置并連接數(shù)據(jù)源卫袒。

2、 設置參數(shù)及數(shù)據(jù)集

2.1 增加參數(shù)“年度”

2.2 本例中要取上年逮矛,實際上也是個簡單的多源關(guān)聯(lián)報表莉兰,在之前制作多源關(guān)聯(lián)報表時杉辙,永洪單元格內(nèi)的多源關(guān)聯(lián)有些問題,所以這里還是在數(shù)據(jù)集階段進行處理,這里創(chuàng)建三個數(shù)據(jù)集:

數(shù)據(jù)集 1:學生成績:用 SQL 語句取數(shù)析珊,條件中加了個 nd=?{年度}奕剃,年度是數(shù)據(jù)定義的傳入?yún)?shù)茄袖,根據(jù)這個參數(shù)做數(shù)據(jù)過濾品山。并且根據(jù)三科成績新增字段“總分”,班級字段在數(shù)據(jù)庫中存的是數(shù)字,這里新增字段做值映射。

數(shù)據(jù)集 2:上學期成績:因為要根據(jù)傳入?yún)?shù)取上學期數(shù)據(jù),所以此處增加條件:nd+1=?{年度}

數(shù)據(jù)集 3:學生成績統(tǒng)計戚炫,新增“組合數(shù)據(jù)集”,將上述兩個數(shù)據(jù)集通過班級和學號關(guān)聯(lián)在一起:

need-to-insert-img

3、 設計報表模板

need-to-insert-img

3.1 班級列:按照班級進行分組,并且設置縱向三個單元格合并究西。

3.2 姓名列:取 studentid 字段的值擴展卤材,設置父單元格為班級列

3.3 語文遮斥、英語术吗、數(shù)學较屿、總分四列整吆,將相應字段按照“總和”方式拖拽到對應位置府蛇,注意,這里一定要是總和屿愚,否則后邊排名會有問題穷遂。

3.4 班級排名:將總分字段按照求和方式拖拽到對應單元格函匕,設置動態(tài)計算方式為“排名計算”,計算依據(jù)設置成“沿平面縱向”蚪黑,并且設置“縱向父單元格”為 studentid 所在位置

3.5 年級排名:按照班級排名方式進行設置盅惜,最后設置計算依據(jù)為:“格子”。

3.6 上學期排名:按照班級排名操作忌穿,將上學期總分拖拽到對應單元格抒寂,并進行設置,數(shù)據(jù)集中通過組合數(shù)據(jù)集已經(jīng)將上學期數(shù)據(jù)關(guān)聯(lián)在一起掠剑。

3.7 名次變化:將單元格類型設置成“格間計算”屈芜,設置公式為:cell(ridx,8)-cell(ridx,6),永洪中沒有 Excel 單元格概念朴译,所以要用自己內(nèi)部的一些語法井佑,cell 函數(shù)可以根據(jù)行列號獲取對應單元格的值,ridx 表示當前行號眠寿,8 表示報表中的第 9 列

3.8 成績前三名統(tǒng)計:該單元格類型設置成“格間計算”毅糟,里邊公式為:cell(ridx-10,0)+“成績前三名同學是:”,此處做了個字符串拼接澜公,cell(ridx-10,0)姆另,這個取對應的班級名稱,ridx 是當前行號坟乾,現(xiàn)在每個班級都是 10 個人迹辐,所以此處減去 10,如果每個班級不同甚侣,那么還需要找單元格算出對應的數(shù)量才能獲取明吩。

3.9 前三名取法:設置單元格類型為“格間計算”,里邊公式寫入:

此處通過 js 的語法殷费,對班級列做行列循環(huán)印荔,然后獲取名次 <=3 的行號,從而獲取對應的學號详羡,這里只是返回前三名仍律,但是前三名的學號并不是第一的排最前邊,如果要按照順序实柠,這個 js 腳本要寫的比較復雜水泉,這里就不做過多設置。

名次進步最快的三個同學,也是用格間計算 JavaScript 腳本方式草则,可以做出來钢拧,但是需要比較多的腳本來支持了,更多的是考驗報表開發(fā)人員的變成能力了炕横,這里就不做驗證了源内。

注:這兩行總結(jié)行雖說前邊班級分組做了合并單元格,這里也要手動設置下縱向父單元格份殿,否則無法做到跟隨擴展姿锭。

運行結(jié)果

完成后點評

1、 用時約四小時伯铣,格間計算那幾個單元格處理時間較長呻此,比較考驗開發(fā)能力,如果加上名次上升最快三位腔寡,需要更長時間焚鲜。

2、 內(nèi)置統(tǒng)計模型豐富放前,比如這里做排名忿磅,直接用內(nèi)置方法排名計算就行,除了排名外還有其他方法供使用凭语。

3葱她、 組合數(shù)據(jù)集設置比較方便,這樣可以將當年和上期數(shù)據(jù)在數(shù)據(jù)集階段可以合成一個似扔,可以不用再報表中關(guān)聯(lián)吨些。

4、 中文字典顯示和排序不方便炒辉,比如班級在數(shù)據(jù)庫中存的數(shù)字豪墅,想顯示中文的話現(xiàn)在是在數(shù)據(jù)集里新增了鍵值映射,或者要通過字典表關(guān)聯(lián)黔寇。報表單元格里要想顯示中文偶器,必須用中文字段,但是排序就會按照中文排序缝裤,要手動去調(diào)整屏轰,如果班級不固定,比較難調(diào)憋飞。

5霎苗、 單元格間計算不方便,比如和上學期的名次變化搀崭,在類 Excel 的開發(fā)工具中叨粘,直接引用單元格名稱就可以一猾编,但永洪只能用格間計算瘤睹,并且里邊要用自己的坐標方式升敲,使用起來不太方便。

6轰传、 做一些單元格匯總時驴党,只能寫格間計算,里邊寫入 javascript 腳本获茬,雖說很靈活港庄,但是難度較高,復雜的需要較多代碼恕曲,開發(fā)周期長鹏氧,多報表開發(fā)人員的技術(shù)水平要求更高

億信

制作過程

1、 配置并鏈接數(shù)據(jù)源

2佩谣、 設置參數(shù)及數(shù)據(jù)集

2.1把还、 增加參數(shù)“nd”。

2.2茸俭、 在數(shù)據(jù)集中添加主題表吊履,億信報表計算時會根據(jù)報表單元格的設置生成 SQL 從主題表中取數(shù),本例要取今年和去年數(shù)據(jù)调鬓,所以數(shù)據(jù)集中要取兩年數(shù)據(jù)艇炎,直接用 SQL:select * from xscj where nd=<#=@nd#> or nd+1=<#=@nd#>

3、 設計報表模板

核心設置:

3.1 班級內(nèi)部排名:=F3.rank

3.2 年級間排名:=F3$$.rank(F3)腾窝,本例中只有兩層排名缀踪,班級排名是最內(nèi)層排名,年級排名是最外層排名虹脯,兩個排名使用 rank 函數(shù)就行辜贵,如果中間還有其他層級需要排名,就不能這么做了归形,需要增加輔助單元格托慨,下面通過一個省、市暇榴、縣三級來看下多層級排名的使用厚棵。

縣排名和省排名,一個是最內(nèi)層一個是最外層蔼紧,所以表達式就是之前提到的婆硬,而市級排名需要增加輔助行,第三行奸例,首先將 A2 和 A3 合并彬犯,這個就相當于其他工具的左主格設定向楼,然后在 E3 單元格中寫入表達式:=GRID1.E2$.join(“,”),取當前省內(nèi)對應的 E2 的值拼成一個字符串谐区,然后在市排名的 G2 單元格中寫入表達式:=asstr(GRID1.E3).split(“,”).rank(E2)湖蜕,取 E3 的值按逗號分割后排序回填到對應位置。**

3.3 報表中要取當前學期和上學期的數(shù)據(jù)宋列,在《多源關(guān)聯(lián)分片》測試中看到昭抒,億信多源關(guān)聯(lián)會有些限制,所以本例中并沒有采用潤乾或者帆軟那種多數(shù)據(jù)集形式炼杖,而是在數(shù)據(jù)集中取出了兩年的數(shù)據(jù)灭返,然后在報表單元格里加指標限定條件,比如上學期數(shù)據(jù)配置指標的過濾條件:

3.4 獲取成績前三名同學學號:=B3[G3[G3[G3.FIND(“1”)]+“,”+B3[G3[G3[G3.FIND(“2”)]+“,”+B3[G3[G3[G3.FIND(“3”)]坤邪,B3[G3[G3[G3.FIND(“1”)] 表達式含義:班級是個合并格熙含,G3.FIND(“1”)表示取出當前班級內(nèi)的G3等于1的值所在的位置,然后B3.FIND(“1”)表示取出當前班級內(nèi)的G3等于1的值所在的位置艇纺,然后B3.FIND(“1”) 表示取出當前班級內(nèi)的 G3 等于 1 的值所在的位置怎静,然后 B3[] 根據(jù)這個位置取到對應 B3 的值,也就是取到排名第一的人的姓名喂饥,其余類似消约。

3.5 班級名次上升最快的三位同學學號:=K3$.sort().mid(0,3).select(true,@.leftcell(9).txt).join(“,”),其中员帮,.sort 是將 K3 浮動出來的數(shù)據(jù)降序排序或粮,mid(0,3) 是取排序后的前三項(即前三名),select 的作用的取這前三名對應的 B2 表元的值(字號列)捞高,join 是把前面返回的結(jié)果用逗號隔開轉(zhuǎn)成字符串

運行結(jié)果

完成后點評:

1氯材、 制作用時:1.5 小時

2、 內(nèi)置排名函數(shù)比較豐富硝岗,可以直接使用實現(xiàn)排名計算氢哮;求前 N 條最大值等操作

3、 各個指標(科目成績)之間可以劃定不同的條件范圍型檀,可以直接取出來去年的數(shù)據(jù)冗尤。

4、 ID 轉(zhuǎn) NAME 時只能通過維表設置,也就是必須在數(shù)據(jù)庫中額外添加一個碼表,顯示值配置不簡便靈活字币;

5抢呆、 rank 函數(shù)只支持重復排名答姥,_rk 雖然可以實現(xiàn)不重復排名,但是會改變數(shù)據(jù)的結(jié)果順序,而且只支持指標字段,不支持具體的單元格 / 表元徙瓶;

6毛雇、 本例取兩個學期的數(shù)據(jù)對比,可以制作兩個數(shù)據(jù)集通過關(guān)聯(lián)字段關(guān)聯(lián)在一起侦镇,也可以直接在數(shù)據(jù)集中取出兩學期數(shù)據(jù)灵疮,然后在報表單元格通過年度參數(shù)進行數(shù)據(jù)過濾,億信這里采用的是后者虽缕,在單元格中加條件來限定是取今年成績還是去年成績始藕,當然這個其他工具也都支持蒲稳,就是一個單元格過濾氮趋。

7、 沒有層次坐標體系江耀。兩級排名還可以用相對固定的方法剩胁,比如最內(nèi)層:=F3.rank,最外層:=F3$$.rank(F3)祥国。如果還有更多層昵观,那么需要增加輔助單元格取這個層級下需要排名的數(shù)值,比如數(shù)值在 E2 單元格中舌稀,那么需要在輔助單元格中(比如 E3)寫入:=GRID1.E2$.join(“,”)****啊犬,這個是獲取到當前層級下的 E2 的值用逗號做為分割符拼接在一起,然后在需要顯示的排名的地方寫入:=asstr(GRID1.E3).split(“,”).rank(E2)壁查,這樣才能生成排名觉至,如果層級還增多的話,那么需要大量的輔助單元格睡腿,操作上會相當繁瑣语御。

總結(jié)

本例大體還是能延續(xù)上一例《多源分片報表》的結(jié)論:

這個例子也是各家產(chǎn)品都能實現(xiàn),基本的排名運算都沒有問題席怪。

對于本例中重點考查的跨行組運算应闯,潤乾與帆軟都提供了較完善的層次坐標機制,對付這種格間運算毫無壓力挂捻。Smartbi 也有類似的概念碉纺,但語法體系設計得很煩瑣,寫起來復雜度要高很多刻撒。而永洪就沒有層次坐標體系了骨田,應對這種跨行組的格間運算比較吃力,需要寫出有過程的 js 代碼疫赎,可以說對格間運算基本就沒有像樣的支持盛撑,和前面三款產(chǎn)品的差距相當大。億信看起來實現(xiàn)比較簡單捧搞,但其實也沒有層次坐標體系來應對通用的跨行組運算模型抵卫,只是湊巧有這樣幾個內(nèi)置函數(shù)狮荔,深究下來,和永洪是一個檔次的介粘,只是因為有內(nèi)置函數(shù)而略微勝出殖氏。也就是說,潤乾和帆軟在這方面屬于成熟產(chǎn)品姻采,Smartbi 基本算是及格雅采,而永洪和億信都不能算及格了,永洪更弱一點慨亲。

潤乾和帆軟相比婚瓜,報表擴展與引用模型區(qū)別不大,但計算模型卻有差距刑棵。潤乾增加了特有的計算引擎巴刻,對于更復雜的運算情況就會有明顯優(yōu)勢了(本例中的 esproc 函數(shù))。帆軟復制了潤乾報表模型大部分內(nèi)容蛉签,但計算引擎是潤乾后加的胡陪,而且內(nèi)容非常豐富,就沒有那么容易復制過去了碍舍。

相關(guān)鏈接

報表工具對比選型系列用例——多源分片報表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柠座,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子片橡,更是在濱河造成了極大的恐慌妈经,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锻全,死亡現(xiàn)場離奇詭異狂塘,居然都是意外死亡,警方通過查閱死者的電腦和手機鳄厌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門荞胡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人了嚎,你說我怎么就攤上這事泪漂。” “怎么了歪泳?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵萝勤,是天一觀的道長。 經(jīng)常有香客問我呐伞,道長敌卓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任伶氢,我火速辦了婚禮趟径,結(jié)果婚禮上瘪吏,老公的妹妹穿的比我還像新娘。我一直安慰自己蜗巧,他們只是感情好掌眠,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幕屹,像睡著了一般蓝丙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上望拖,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天渺尘,我揣著相機與錄音,去河邊找鬼靠娱。 笑死沧烈,一個胖子當著我的面吹牛掠兄,可吹牛的內(nèi)容都是我干的像云。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚂夕,長吁一口氣:“原來是場噩夢啊……” “哼迅诬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起婿牍,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侈贷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后等脂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俏蛮,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年上遥,在試婚紗的時候發(fā)現(xiàn)自己被綠了搏屑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡粉楚,死狀恐怖辣恋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情模软,我是刑警寧澤伟骨,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站燃异,受9級特大地震影響携狭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜回俐,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一逛腿、第九天 我趴在偏房一處隱蔽的房頂上張望壹瘟。 院中可真熱鬧,春花似錦鳄逾、人聲如沸稻轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殴俱。三九已至,卻和暖如春枚抵,著一層夾襖步出監(jiān)牢的瞬間线欲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工汽摹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留李丰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓逼泣,卻偏偏與公主長得像趴泌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拉庶,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354