1. 程式人生 > >報表結果按照兩個欄位升序排列

報表結果按照兩個欄位升序排列

需求背景

       報表中使用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函式實現。