Above

Above() 會評估表格中資料行區段內目前列上方的列中的運算式。要計算的列取決於 offset 的值,如果存在,預設為正上方的列。針對圖表而非表格,Above() 會評估圖表的連續表同等表格內目前列上方的列。

Syntax:  

Above([TOTAL] expr [ , offset [,count]])

Return data type: 雙值

Arguments:  

引數 描述
expr 包含待測量資料的運算式或欄位。
offset

將一個 offsetn 指定為大於 0,則可將運算式的評估從目前列往上移動 n 列。

若將位移指定為 0,則會根據目前列來評估運算式。

若指定負值的位移,會讓 Above 函數的作用相當於包含對應正值位移的 Below 函數。

count

透過指定大於 1 的第三個引數 count,函數將會傳回一系列的 count 值,每個值代表各個 count 表格中從原始儲存格向上計算的列數。

在這種形式下,此函數可作為任何特殊範圍函數的引數。 範圍函數

TOTAL

如果表格為單一維度或限定詞 TOTAL 作為引數,則目前資料行區段一律等於整個資料行。

定義彙總範圍

系統會對資料行區段的第一列傳回 NULL 值,因為該列之上沒有任何列。

備註: 資料行區段被定義為具有目前排序順序中的相同維度值的連續儲存格子集。記錄間圖表函數在資料行區段中進行計算,不包括同等連續表圖表中的最右方維度。如果圖表中僅有一個維度,或如果指定 TOTAL 限定詞,運算式會評估完整表格。
備註: 如果表格或同等表格有多個垂直維度,則目前資料行區段僅會包含在所有維度資料行中與目前列有相同值的列 (顯示欄位間排序順序之最後一個維度的資料行除外)。

Limitations:  

遞迴呼叫會傳回 NULL

Examples and results:  

Example 1:  

Customer Sum(Sales) Above(Sum(Sales)) Sum(Sales) + Above(Sum(Sales)) Above offset 3 Higher?
  2566 - - - -
Astrida 587 - - - -
Betacab 539 587 1126 - -
Canutility 683 539 1222 - Higher
Divadip 757 683 1440 1344 Higher
範例 1 表格圖表。

本範例顯示的表格圖表的表示法中,表格是從維度 Customer 和下列量值建立而成:Sum(Sales)Above(Sum(Sales))

資料行 Above(Sum(Sales)) 會針對包含 AstridaCustomer 列傳回 NULL,因為該列之上沒有任何列。Betacab 列的結果顯示 AstridaSum(Sales) 值;Canutility 的結果顯示 BetacabSum(Sales) 值,以此類推。

針對標記為 Sum(Sales)+Above(Sum(Sales)) 的資料行,Betacab 列顯示 Betacab + Astrida 列加上 Sum(Sales) 值的結果 (539+587)。列 Canutility 的結果顯示 Canutility + Betacab 加上 Sum(Sales) 值的結果 (683+539)。

使用 Sum(Sales)+Above(Sum(Sales), 3) 運算式所建立且標記為 Above offset 3 的量值,擁有設為 3 的引數 offset,且具有使用目前列上方第三列值的效果。將目前 CustomerSum(Sales) 值加到上方三列的 Customer 值。前三個 Customer 列傳回的值為 NULL。

該表格也顯示更複雜的量值:一個是從 Sum(Sales)+Above(Sum(Sales)) 建立,另一個標記為 Higher?,是從 IF(Sum(Sales)>Above(Sum(Sales)), 'Higher') 建立而成。

提示: 此函數可同樣用於圖表而非表格,例如長條圖。
提示: 若是其他圖表類型,請將圖表轉換為連續表同等表格,從而可以輕鬆解釋該函數的關聯列。

Example 2:  

本範例顯示的表格圖表的表示法中,以下圖表中新增了更多維度:MonthProduct。 對於包含一個以上維度的圖表,包含 AboveBelowTopBottom 功能的運算式結果取決於 QlikView 將資料行維度排序的順序。QlikView 根據最後排序的維度所產生的資料行區段評估函數。資料行排序順序控制在排序下,並且不一定是資料行在表格中出現的順序。

以下範例 2 的表格圖表的表示法中,最後一個排序的維度是 Month,因此 Above 函數會根據月份進行評估。每個月 (JanAug) 的每個 Product 值都有一組結果 - 一個資料行區段。其後接著下一個資料行區段的序列:針對下個月 Month 的下個 Product。每個 Product 的每個 Customer 值都有一個資料行區段。

Customer Product Month Sum(Sales) Above(Sum(Sales))
      2566 -
Astrida AA Jan 46 -
Astrida AA Feb 60 46
Astrida AA Mar 70 60
Astrida AA Apr 13 70
Astrida AA May 78 13
Astrida AA Jun 20 78
Astrida AA Jul 45 20
Astrida AA Aug 65 45
範例 2 表格圖表。

Example 3:  

範例 3 的表格圖表的表示法中,最後一個排序的維度是 Product。此程序是透過將維度 Product 移動到屬性面板上 [排序] 標籤中的位置 3 而完成。系統會針對每個 Product 評估 Above 函數,而因為只有兩個產品 AABB,每個序列中只會有一個非 NULL 結果。在 Jan 月份的 BB 列中,Above(Sum(Sales)) 的值是 46。而 AA 列的值為 NULL。每月的每個 AA 列的值一律為 NULL,因為 AA 上方沒有任何 Product 值。第二個序列是對 Feb 月份的 AABB 進行評估,針對 Customer 值、Astrida。針對 Astrida 完成所有月份的評估後,該順序會針對第二個 CustomerBetacab 重複執行一次,以此類推。

Customer Product Month Sum(Sales) Above(Sum(Sales))
      2566 -
Astrida AA Jan 46 -
Astrida BB Jan 46 46
Astrida AA Feb 60 -
Astrida BB Feb 60 60
Astrida AA Mar 70 -
Astrida BB Mar 70 70
Astrida AA Apr 13 -
Astrida BB Apr 13 13
範例 3 表格圖表。

Example 4:  

結果

Above 函數可做為範圍函數的輸入使用。例如:RangeAvg (Above(Sum(Sales),1,3))

Above() 函數的引數中,offset 設定為 1,而 count 設定為 3。函數得到資料行區段 (其中有一列) 中目前列正上方三列的 Sum(Sales) 運算式結果。這三個值可用做 RangeAvg() 函數的輸入,該函數進而得出所提供數值範圍中的平均值。

含有 Customer 作為維度的表格可提供 RangeAvg() 運算式的以下結果。

Astrida
Betacab
Canutility
Divadip
-
587
563
603

範例中使用的資料:

Monthnames:

LOAD * INLINE [

Month, Monthnumber

Jan, 1

Feb, 2

Mar, 3

Apr, 4

May, 5

Jun, 6

Jul, 7

Aug, 8

Sep, 9

Oct, 10

Nov, 11

Dec, 12

];

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 '|');

若要取得按正確順序排序的月份,請在建立圖表時前往圖表屬性的 Sort 標籤,並勾選 Sort by 下的 Expression 核取方塊。在運算式方塊中,寫入 Monthnumber