報表結果按照兩個欄位升序排列
需求背景
報表中使用select函式取數時,需要根據兩個欄位升序排列。如從僱員表(employee)中取數,並按照學歷(degree)和性別(sex)欄位升序排列。
分析
報表資料集函式ds.select()函式說明中的一個例子:
例4:ds1.select( name, true, sex=='1', id )
從資料來源ds1中選取性別為男性的name欄位列的值並按id欄位降序排列
但是我們發現這種寫法只能根據一個欄位的排序方式排列,如何實現根據多個欄位的排序方式排序呢?下面我們來看一下實現方法。
實現
方法一:使用select函式
使用select函式實現上述需求,A2單元格:=ds1.select(empid,false,,degree+sex)
結果如下:
先按照學歷升序4到5,再按照性別升序1到2。
方法二:使用selectEx函式
我們檢視selectEx的函式說明可以發現該函式正是為實現上述需求定義的。我們看一下具體實現:
結果如下:
先按照學歷升序4到5,再按照性別升序1到2,結果同第一種實現方式。
比較
實現上述需求的兩種方法不相伯仲,下面我們來比較一下不同需求下的這兩種方法。
1、結果要求按照多個不同型別的欄位排序方式進行排序,如結果按照degree、sex、birthday升序排列。這時我們再使用第一種方法時會報錯:
而使用selectEx函式則可以實現,如:=ds1.selectEx(empid,,"degree;sex;birthday,false"),所以這種情況下建議使用selectEx函式實現。
2、結果需要根據某些欄位升序,某些欄位降序展現,如結果按照degree升序、sex降序、birthday升序排列。這時我們發現使用select函式無法實現,以為其只能指定一種排序方式。使用selectEx則可以實現,如:=ds1.selectEx(empid,,"degree,false;sex,true;birthday,false")即可。所以這種情況下也建議使用selectEx函式實現。