Above - 圖表函數
Above() 會在表格中某個資料行區段內的目前列上方,在某個列中評估運算式。用來計算的列取決於 offset 的值,如果呈現,預設情況下是正上方的列。對於表格以外的圖表,Above() 會評估圖表連續表同等表格中目前列上方的列。
語法:
Above([TOTAL] expr [ , offset [,count]])
傳回的資料類型: 雙值
| 引數 | 描述 |
|---|---|
| expr | 包含待測量之資料的運算式或欄位。 |
| offset | 將 offset n 指定為大於 0,則可將運算式的評估從目前列往上移動 n 列。 若將位移指定為 0,則會根據目前列來評估運算式。 若指定負值的位移,會讓 Above 函數的作用相當於包含對應正值位移的 Below 函數。 |
| count | 將第三個引數 count 指定為大於 1,函數會傳回 count 的範圍值,從原始儲存格往上算 count 個表格列的每列一個值。 在這種形式下,該函數可作為任何特殊範圍函數的引數。 範圍函數 |
| TOTAL | 如果表格為單一維度或 TOTAL 限定詞作為引數,則目前資料行區段一律等於整個資料行。 |
系統會對資料行區段的第一列傳回 NULL 值,因為該列之上沒有任何列。
限制:
-
遞迴呼叫會傳回 NULL。
-
當任何圖表運算式使用了此圖表函數時,就不允許在圖表中依據 Y 值排序,或在表格中依據運算式資料行排序。因此,這些排序替代選項會自動停用。若您在視覺化或表格中使用此圖表函數,視覺化的排序將還原為對此函數的排序輸入。
| 範例 | 結果 |
|---|---|
|
Above( Sum(Sales) ) |
傳回目前列上一列的 Sales 值。 |
範例 - Above 基礎事項
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
載入到稱為 Example 之資料表格的資料集。
-
資料表格中的欄位如下:
-
Year
-
Sales
-
載入指令碼
Example:
LOAD * INLINE [
Year, Sales
2019, 1000
2020, 1500
2021, 1200
2022, 1800
2023, 1700
];結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
Year
建立下列量值:
-
=Sum(Sales),用來尋找年度銷售額。
-
=Above(Sum(Sales)),用來尋找上一年度的銷售值。
-
=Sum(Sales) - Above(Sum(Sales)),用來計算目前年度的 Sales 值與上一年度的值之間的差異。
-
=RangeSum(Above(Sales, 1, 2)),用來展示前兩年銷售額的兩年滾動彙總。
-
=(Sales - Above(Sales)) / Above(Sales),用來以比率 / 百分比形式傳回 Sales 中的變化。 若要將此值顯示為百分比,請在數字格式之下,選取數字 > 簡單格式 > 12.34%。
| Year | Sum(Sales) | Above(Sum(Sales)) | Sum(Sales) - Above(Sum(Sales)) | RangeSum(Above(Sales, 1, 2) | (Sales - Above(Sales)) / Above(Sales) |
|---|---|---|---|---|---|
| Totals | 7200 | - | - | 0 | - |
| 2019 | 1000 | - | - | 0 | - |
| 2020 | 1500 | 1000 | 500 | 1000 | 50.00% |
| 2021 | 1200 | 1500 | -300 | 2500 | -20.00% |
| 2022 | 1800 | 1200 | 600 | 2700 | 50.00% |
| 2023 | 1700 | 1800 | -100 | 3000 | -5.56% |
查看結果,您可以比較目前期間與前一期間的 Sales 值。
-
Sum(Sales)- Above(Sum(Sales)) 量值傳回 Sales 值的變更,比較目前期間與上一個期間。
-
RangeSum(Above(Sales, 1, 2)) 量值傳回前兩個 Sales 值的總和。
-
(Sales - Above(Sales)) / Above(Sales) 量值傳回 Sales 的變更,以百分比與上一個期間比較。
請執行下列動作:
建立長條圖,然後將此欄位新增為維度:
-
Year
建立下列量值:
-
=Sum(Sales) - Above(Sum(Sales)),用來傳回逐年差異。
顯示 Above 函數結果的長條圖

在長條圖中使用 Above 函數可以在視覺上比較目前期間與上一期間的銷售額之間的差異。
範例 - Above 使用情境
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
載入到稱為 Example 之資料表格的資料集。
-
資料表格中的欄位如下:
-
SalesYear
-
SalesAmount
-
載入指令碼
Example:
LOAD * INLINE [
SalesYear, SalesAmount
2019, 500
2020, 800
2021, 400
2022, 700
2023, 600
];結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
SalesYear
建立下列量值:
-
=Sum(SalesAmount),用來彙總銷售額。
-
=RangeSum(Above(SalesAmount, 0, RowNo())),用來計算 SalesAmount 值的累計總計。
| SalesYear | Sum(SalesAmount) | RangeSum(Above(SalesAmount, 0, RowNo())) |
|---|---|---|
| Totals | 3000 | 0 |
| 2019 | 500 | 500 |
| 2020 | 800 | 1300 |
| 2021 | 400 | 1700 |
| 2022 | 700 | 2400 |
| 2023 | 600 | 3000 |
結果顯示如何合併使用 RangeSum 函數和 Above 函數來建立累計總計。
請執行下列動作:
建立長條圖,然後將此欄位新增為維度:
-
SalesYear
建立下列量值:
-
=RangeSum(Above(SalesAmount, 0, RowNo())),用來傳回累計銷售值。
依年份顯示累計銷售值的長條圖

範例 - 使用 Above 的圖表運算式
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
兩個資料表格分別稱為 Monthnames 和 Sales2013。
載入指令碼
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
Customer
建立下列量值:
-
=Sum(Sales),用來計算銷售總和。
-
=Above(Sum(Sales)),用來顯示上一列的銷售總和。
-
=Sum(Sales)+Above(Sum(Sales)),用來加總銷售值總和與目前列上方的客戶列銷售總和。
-
=Sum(Sales)+Above(Sum(Sales), 3),用來將目前 Customer 的 Sum(Sales) 值加到上方三列的 Customer 值。
-
=IF(Sum(Sales)>Above(Sum(Sales)), 'Higher'),用來為 Sum(Sales) 結果大於上一列客戶 Sum(Sales) 的客戶新增標籤「Higher」。
| Customer | Sum(Sales) | Above(Sum(Sales)) | Sum(Sales)+Above(Sum(Sales)) | Sum(Sales)+Above(Sum(Sales), 3) | IF(Sum(Sales)>Above(Sum(Sales)), 'Higher') |
|---|---|---|---|---|---|
| Totals | 2566 | - | - | - | - |
| Astrida | 587 | - | - | - | - |
| Betacab | 539 | 587 | 1126 | - | - |
| Canutility | 683 | 539 | 1222 | - | Higher |
| Divadip | 757 | 683 | 1440 | 1344 | Higher |
量值 Above(Sum(Sales)) 會針對客戶 Astrida 傳回 NULL,因為其上方沒有任何列。客戶 Betacab 的結果顯示 Astrida 的 Sum(Sales) 值。Canutility 的結果顯示 Betacab 的 Sum(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) 具有引數 offset,設定為 3。這將取得目前列上方 3 列的列中的值。將目前 Customer 的 Sum(Sales) 值加到上方三列 Customer 的值。例如,將 Divadip 的 Sum(Sales) 加到 Astrida 的 Sum(Sales),即 Divadip 上方三列的客戶。前 3 個 Customer 列傳回的值為 NULL,因為沒有資料。
量值 IF(Sum(Sales)>Above(Sum(Sales)), 'Higher')為客戶 Canutility 和 Divadip 回傳值 Higher,因為他們的銷售結果分別高於上一列客戶的銷售總和 Betacab 和 Canutility。
範例 - 根據排列順序的 Above 使用情境
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
三個資料表格分別稱為 Monthnames、Sales2013 和 Product。
載入指令碼
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');
Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Customer
-
Product
-
Month
建立下列量值:
-
=Sum(Sales),用來計算銷售總和。
-
=Above(Sum(Sales)),用來顯示上一列的銷售總和。
| Customer | Product | Month | Sum(Sales) | Above(Sum(Sales)) |
|---|---|---|---|---|
| Totals | - | - | 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 |
| Astrida | AA | Sep | 78 | 65 |
| Astrida | AA | Oct | 12 | 78 |
| Astrida | AA | Nov | 78 | 12 |
| Astrida | AA | Dec | 22 | 78 |
| Astrida | BB | Jan | 46 | - |
| Astrida | BB | Feb | 60 | 46 |
對於有多個維度的圖表,包含 Above、Below、Top 和 Bottom 函數的運算式結果取決於按 Qlik Sense 排序的資料行維度的順序。Qlik Sense 會根據上一次排序維度所產生的資料行區段來評估功能。資料行排序順序在屬性面板的排序下進行控制,而不需要按照資料行在表格中呈現的順序。
在結果表格中,最後一個排序的維度是 Month,因此 Above 函數會根據月份進行評估。每個月 (Jan 到 Dec) 的每個 Product 值都有一組結果 - 一個資料行區段。其後接著下一個資料行區段的序列:針對下個月 Month 的下個 Product。每個 Product 的每個 Customer 值都有一個資料行區段。
範例 - 使用不同排列順序的 Above 使用情境
概述
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
三個資料表格分別稱為 Monthnames、Sales2013 和 Product。
載入指令碼
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');
Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
Customer
-
Product
-
Month
建立下列量值:
-
=Sum(Sales),用來計算銷售總和。
-
=Above(Sum(Sales)),用來顯示上一列的銷售總和。
在屬性面板中變更表格的排列順序。選取排序,然後將產品維度拖曳到排列順序中的第三個位置。
| Customer | Product | Month | Sum(Sales) | Above(Sum(Sales)) |
|---|---|---|---|---|
| Totals | - | - | 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 |
| Astrida | AA | May | 78 | - |
| Astrida | BB | May | 78 | 78 |
| Astrida | AA | Jun | 20 | - |
| Astrida | BB | Jun | 20 | 20 |
| Astrida | AA | Jul | 45 | - |
| Astrida | BB | Jul | 45 | 45 |
在結果表格中,最後一個後排序的維度是 Product。系統會針對每個 Product 評估 Above 函數,而因為只有兩個產品 AA 和 BB,每個序列中只會有一個非 NULL 結果。在 Jan 的 BB 列中,Above(Sum(Sales)) 的值是 46。而 AA 列的值為 NULL。每月的每個 AA 列的值一律為 NULL,因為 AA 上方沒有任何 Product 值。第二個序列是對 Feb 月份的 AA 和 BB 進行評估,針對 Customer 值、Astrida。針對 Astrida 完成所有月份的評估後,該順序會針對第二個客戶 Betacab 重複執行一次,以此類推。
範例 - 搭配使用 Above 函數與 RangeAvg
概述
Above 函數可做為範圍函數的輸入使用。此範例使用 RangeAvg 中的函數。
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
-
三個資料表格分別稱為 Monthnames、Sales2013 和 Product。
載入指令碼
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, 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 (MonthText, 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 '|');
Product:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|UnitPrice
Astrida|AA|1|4|16
Astrida|AA|7|10|15
Astrida|BB|4|9|9
Betacab|CC|6|5|10
Betacab|AA|5|2|20
Betacab|BB||| 25
Canutility|AA|||15
Canutility|CC| ||19
Divadip|CC|2|4|16
Divadip|DD|3|1|25
] (delimiter is '|');結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
-
Customer
建立下列量值:
-
=RangeAvg (Above(Sum(Sales),1,3))
| Customer | RangeAvg (Above(Sum(Sales),1,3)) |
|---|---|
| Totals | - |
| Astrida | - |
| Betacab | 587 |
| Canutility | 563 |
| Divadip | 603 |
在 Above 函數的引數中,offset 設為 1 且 count 設為 3。函數得到資料行區段 (其中有一列) 中目前列正上方三列的 Sum(Sales) 運算式結果。這三個值可用做 RangeAvg 函數的輸入,該函數進而得出所提供數值範圍中的平均值。