Below - 图表函数
Below() 用于评估表格中列段数据内当前行下面的行的表达式。要计算的行取决于 offset 值,如果存在,则默认计算直接下面的行。对于除表格以外的图表,Below() 用于计算图表的等效垂直表中当前列下面的行的值。
语法:
Below([TOTAL] expr
[ , offset [,count
]])
返回数据类型: 双
参数
expr
|
表达式或字段包含要度量的数据。 |
offset
|
指定 offsetn 大于 1 后,将表达式评估从当前行开始向下移动 n 行。
指定 0 偏移量可以计算当前行上的表达式的值。
指定负偏移量数值后,使 Below 函数效果类似于具有相应正偏移量数值的 Above 函数。
|
count
|
通过指定第三个参数 count 大于 1,函数将返回一连串 count 值,每个值对应一个从原始单元格开始向下计数的 count 表格行。 此时,可以将该函数用作任何特殊范围函数的参数。 范围函数
|
TOTAL
|
如果表格是单维度或如果将 TOTAL 限定符用作参数,则当前列段数据总是与整列相等。
定义聚合范围
|
在列段数据的最后一行中返回 NULL 值,因为该行下面没有其他行。
信息注释列段数据是指按当前排序顺序拥有与维度相同的值的连续单元格子集。内部记录图表函数在列段数据中进行计算,不包括等效垂直表图表中的最右侧维度。如果图表中只有一个维度,或者如果已指定 TOTAL 限定符,则计算整个表格中的表达式。
信息注释如果表格或表格等同物有多个垂直维度,当前列段数据将只包括值与所有维度列的当前行相同的行,但按内部字段排序显示最后维度的列除外。
限制:
示例:图表表达式
Below( Sum(Sales) )
|
返回当前行下方一行的 Sales 值。 |
示例 - Below 基本原理
概览
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有以下字段:
加载脚本
Example:
LOAD * INLINE [
Year, Sales
2019, 1000
2020, 1500
2021, 1200
2022, 1800
2023, 1700
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
创建以下度量:
-
=Sum(Sales),用于查找年销售额。
-
=Below(Sum(Sales)),用于查找下一年的销售额值。
-
=Sum(Sales) - Below(Sum(Sales)),用于计算当前年度值与下一年度 Sales 值之间的差异。
-
=RangeSum(Below(Sales, 1, 2)),用于展示下两年销售额的连续两年汇总。
-
=(Sales - Below(Sales)) / Below(Sales),用于以比率/百分比返回 Sales 的变化。 要将此值显示为百分比,可在数字格式设定下选择数字 > 简单格式 > 12.34%。
结果表
Year |
Sum(Sales) |
Below(Sum(Sales)) |
Sum(Sales) - Below(Sum(Sales)) |
RangeSum(Below(Sales, 1, 2) |
(Sales - Below(Sales)) / Below(Sales) |
Totals | 7200 | - | - | 0 | - |
2019 |
1000 |
1500 |
-500 |
2700 |
-33.33% |
2020 | 1500 | 1200 | 300 | 3000 | 25.00% |
2021 | 1200 | 1800 | -600 | 3500 | -33.00% |
2022 | 1800 | 1700 | 100 | 1700 | 5.88% |
2023 | 1700 | - | - | 0 | - |
查看结果后,您可以将当前期间的 Sales 值与下一期间进行比较。
-
Sum(Sales) - Below(Sum(Sales)) 度量值返回 Sales 值中的变化,将当前期间与下一期间进行比较。
-
RangeSum(Below(Sales, 1, 2)) 度量返回下两个 Sales 值的总和。
-
(Sales - Below(Sales)) / Below(Sales) 度量以百分比形式返回与下个期间相比 Sales 的变化。
提示注释此函数也可以用于图表(如条形图),但不能用于表格。
执行以下操作:
创建条形图,然后将此字段添加为维度:
创建以下度量:
显示 Below 函数结果的条形图
在条形图中使用 Below 函数,可以直观地比较当前期间销售额与下一期间销售额之间的差异。
示例 – Below 场景
概览
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
-
加载到名为 Example 的数据表中的数据集。
-
数据表中有以下字段:
加载脚本
Example:
LOAD * INLINE [
SalesYear, SalesAmount
2019, 500
2020, 800
2021, 400
2022, 700
2023, 600
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
创建以下度量:
-
=Sum(SalesAmount),用于汇总销售额。
-
=RangeSum(Below(SalesAmount, 0, NoOfRows() - RowNo())),用于计算 SalesAmount 值的概略总计。
结果表
SalesYear |
Sum(SalesAmount) |
RangeSum(Below(SalesAmount, 0, NoOfRows() - RowNo())) |
Totals | 3000 | 0 |
2019 |
500 |
2400 |
2020 | 800 | 1900 |
2021 | 400 | 1100 |
2022 | 700 | 700 |
2023 | 600 | 0 |
结果显示了如何使用 RangeSum 函数和 Below 函数的组合来创建概略总计。
提示注释此函数也可以用于图表(如条形图),但不能用于表格。
执行以下操作:
创建条形图,然后将此字段添加为维度:
创建以下度量:
按年显示累计概略销售额值的条形图
将 Below 函数与条形图中的 RangeSum 结合使用,可以直观地显示累计的概略销售值。
示例 - 使用 Below 的图表表达式
概览
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
加载脚本
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 '|');
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
创建以下度量:
-
=Sum(Sales),用于计算销售额的总和。
-
=Below(Sum(Sales)),显示上一行的销售额总和。
-
=Sum(Sales)+Below(Sum(Sales)),用于将销售价值总和与当前行下方客户行的销售额总和相加。
-
=Sum(Sales)+Below(Sum(Sales), 3),用于将当前 Customer 的 Sum(Sales) 值与下方相距三行的 Customer 的值相加。
-
=If(Sum(Sales)>Below(Sum(Sales)), 'Higher'),用于为 Sum(Sales) 结果大于下方行中客户的 Sum(Sales) 的客户添加标签“Higher”。
结果表
Customer |
Sum(Sales) |
Below(Sum(Sales)) |
Sum(Sales)+Below(Sum(Sales)) |
Sum(Sales)+Below(Sum(Sales), 3) |
If(Sum(Sales)>Below(Sum(Sales)), 'Higher') |
Totals | 2566 | - | - | - | - |
Astrida |
587 |
539 |
1126 |
1334 |
Higher |
Betacab | 539 | 683 | 1222 | - | - |
Canutility | 683 | 757 | 1440 | - | - |
Divadip | 757 | - | - | - | - |
对于包含多个维度的图表,表达式(包含 Above、Below、Top 和 Bottom 函数)的结果取决于 Qlik Sense 对列维度进行排序的顺序。Qlik Sense 根据最后排序的维度得出的列段数据计数函数的值。可以在排序下的属性面板中控制列排序顺序,并且列不一定按顺序显示在表格中。 有关使用排序顺序的示例,请参阅示例 - 基于排序顺序的 Above 场景。
度量 Below(Sum(Sales)) 返回客户 Divadip 的 NULL,因为它下方没有行。行 Canutility 的结果显示 Divadip 的 Sum(Sales) 的值。Betacab 的结果显示 Canutility 的 Sum(Sales) 的值,以此类推。
对于度量 Sum(Sales)+Below(Sum(Sales)),Astrida 的行返回将行 Betacab + Astrida (539+587) 的 Sum(Sales) 值相加的结果。Betacab 行的结果将显示 Canutility + Betacab (539+683) 的 Sum(Sales) 值的相加结果。
度量 Sum(Sales)+Below(Sum(Sales), 3) 具有参数 offset,设置为 3,并具有取当前行下方相距三行的行中值的效果。它将当前 Customer 的 Sum(Sales) 值添加到下面三行 Customer 的值中。后三个 Customer 行的值是 NULL 值。
度量 IF(Sum(Sales)>Below(Sum(Sales)), 'Higher') 返回 Astrida 客户的值 Higher,因为他们的销售额结果大于下一行中客户的销售总和 Betacab。
提示注释此函数也可以用于图表(如条形图),但不能用于表格。
提示注释对于其他图表类型,应将图表转换成等效垂直表,这样您就可以轻松解释该函数涉及到的行。
示例 - 将 Below 函数结合 RangeAvg 使用
概览
Below 函数可用作范围函数的输入。本例在 RangeAvg 中使用了该函数。
打开数据加载编辑器,并将下面的加载脚本添加到新部分。
加载脚本包含:
加载脚本
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 | RangeAvg (Below(Sum(Sales),1,3)) |
Totals | - |
---|
Astrida | 660 |
Betacab | 720 |
Canutility | 757 |
Divadip | - |
在 Below 函数的参数中,offset 设置为 1 并且 count 设置为 3。函数在列段数据(其中有一行)当前行正下方的三行中查找表达式 Sum(Sales) 的结果。这三个值用作 RangeAvg 函数的输入,用于查找所提供的数字范围中的平均值。