Rank - 圖表函數
Rank() 會評估運算式中圖表的列,然後針對各個列,顯示運算式中所評估的維度值的相對位置。評估運算式時,該函數會比較該結果與包含目前資料行區段的其他列所產生的結果,並傳回區段內目前列的排名。
針對圖表而非表格,目前的資料行區段會在其出現於圖表的連續表同等表格時加以定義。
語法:
Rank([TOTAL expr[, mode[, fmt]])
傳回的資料類型: 雙值
引數:
- expr: 包含待測量資料的運算式或欄位。
- mode:指定函數結果的數字表示法。
- fmt:指定函數結果的文字表示法。
- TOTAL:如果圖表為單一維度或運算式前面加上 TOTAL 限定詞,則會針對整個資料行評估該函數。 如果表格或同等表格有多個垂直維度,則目前資料行區段僅會包含在所有維度資料行中與目前列有相同值的列 (顯示欄位間排序順序之最後一個維度的資料行除外)。
傳回的排名都是雙值,在這種情況下,各個列都會有唯一的排名,這是介於 1 與目前資料行區段中的列數兩者之間的整數。
多個列有相同的排名時,可以使用 mode 和 fmt 參數控制文字和數字表示法。
mode
第二個引數 mode 可控制下列值:
值 | 描述 |
---|---|
0 (預設) |
如果共用群組中所有的排名都落在整個排名中間值下半部,所有列將得到共用群組的最低排名。 如果共用群組中所有的排名都落在整個排名中間值上半部,所有列將得到共用群組的最高排名。 如果共用群組中的排名落在整個排名的中間值,所有列的值將相當於整個資料行區段中最高與最低排名兩者的平均。 |
1 | 所有列的最低排名。 |
2 | 所有列的平均排名。 |
3 | 所有列的最高排名。 |
4 | 第一列的最低排名,然後每列遞增 1。 |
fmt
第三個引數 fmt 可使用下列值:
值 | 描述 |
---|---|
0 (預設) | 低值 - 所有列的高值 (例如 3 - 4)。 |
1 | 所有列的低值。 |
2 | 第一列的低值,在後續列上則空白。 |
mode 4 與 fmt 2 的列順序取決於圖表維度的排序順序。
範例與結果:
從維度 Product 和 Sales 建立兩個圖表,再從 Product 和 UnitSales 建立另一個圖表。如下表所示新增量值。
範例 1:
建立一個具有維度 Customer 和 Sales 及量值 Rank(Sales) 的表格。
結果取決於維度的排序順序。如果表格針對 Customer 排序,該表格會列出 Astrida 的所有 Sales 值,然後列出 Betacab,以此類推。Rank(Sales) 的結果將會顯示 10 代表 Sales 值 12,9 代表 Sales 值 13,以此類推,而回傳的 1 排名值則代表 Sales 值 78。下一個資料行區段的開頭是 Betacab,對此,區段中的 Sales 的第一個值是 12。其 Rank(Sales) 排名值指定為 11。
如果表格針對 Sales 排序,資料行區段會包含 Sales 值和對應的 Customer。因為有兩個 Sales 值都是 12 (Astrida 和 Betacab),針對該資料行區段,Customer 每個值的 Rank(Sales) 值是 1-2。這是因為 Sales 值 12 有兩個 Customer 值。若有 4 個值,所有列的結果就會是 1-4。這顯示了引數 fmt 預設值 (0) 結果的外觀。
範例 2:
以維度 [Customer] 取代 [Product],並新增量值 Rank(Sales,1,2)。
這樣系統會針對每個資料行區段的第一列傳回 1,並讓所有其他列保留空白,因為引數 mode 和 fmt 分別設為 1 和 2。
範例中使用的資料:
ProductData:
Load * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD|0|25
Canutility|AA|8|15
Canutility|CC|0|19
] (delimiter is '|');
Sales2013:
crosstable (Month, Sales) LOAD * inline [
Customer|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
Astrida|46|60|70|13|78|20|45|65|78|12|78|22
Betacab|65|56|22|79|12|56|45|24|32|78|55|15
Canutility|77|68|34|91|24|68|57|36|44|90|67|27
Divadip|57|36|44|90|67|27|57|68|47|90|80|94
] (delimiter is '|');