EARLIER
返回提及的列的外部计算传递中指定列的当前值。
在想要使用某个值作为输入并且基于该输入进行计算的嵌套计算中,EARLIER 会很有用。在 Microsoft Excel 中,只能在当前行的上下文内执行此类计算;但在 PowerPivot 中,您可以存储输入的值,然后使用来自整个表的数据进行计算。
EARLIER 主要用于计算列的上下文中。
语法
EARLIER(<column>, <number>)
参数
项 | 定义 |
---|---|
column | 列或解析为列的表达式。 |
num | (可选)外部计算传递到的正数。 下一个外部计算级别由 1 表示,两个外部级别由 2 表示,依此类推。 在省略时,默认值为 1。 |
属性值/返回值
在外部计算传递的 number 上来自 column 的行的当前值。
异常
错误说明
注释
如果在表扫描开始前具有行上下文,则 EARLIER 将成功。否则,它将返回错误。
EARLIER 的性能可能很慢,因为从理论上讲,它可能必须执行大量运算,数目接近于(列中)总行数乘以相同数目(取决于表达式的语法)。例如,如果您在列中具有 10 行,则可能需要进行大约 100 次运算;如果具有大约 100 行,则可能需要执行接近 10,000 次运算。
注意
实际上,VertiPaq 引擎会执行优化以便减少实际的计算数量,但在创建涉及递归的公式时您一定要小心。
示例
为了说明如何使用 EARLIER,需要建立一个方案,该方案计算一个排名值,然后在其他计算中使用该排名值。
下面的示例基于这个简单表 ProductSubcategory,该表显示每个 ProductSubcategory 的总销售额。
此处所示的是包括排名列的最终表。
ProductSubcategoryKey |
EnglishProductSubcategoryName |
TotalSubcategorySales |
SubcategoryRanking |
---|---|---|---|
18 |
Bib-Shorts |
$156,167.88 |
18 |
26 |
Bike Racks |
$220,720.70 |
14 |
27 |
Bike Stands |
$35,628.69 |
30 |
28 |
Bottles and Cages |
$59,342.43 |
24 |
5 |
Bottom Brackets |
$48,643.47 |
27 |
6 |
Brakes |
$62,113.16 |
23 |
19 |
Caps |
$47,934.54 |
28 |
7 |
Chains |
$8,847.08 |
35 |
29 |
Cleaners |
$16,882.62 |
32 |
8 |
Cranksets |
$191,522.09 |
15 |
9 |
Derailleurs |
$64,965.33 |
22 |
30 |
Fenders |
$41,974.10 |
29 |
10 |
Forks |
$74,727.66 |
21 |
20 |
Gloves |
$228,353.58 |
12 |
4 |
Handlebars |
$163,257.06 |
17 |
11 |
Headsets |
$57,659.99 |
25 |
31 |
Helmets |
$451,192.31 |
9 |
32 |
Hydration Packs |
$96,893.78 |
20 |
21 |
Jerseys |
$699,429.78 |
7 |
33 |
Lights |
|
36 |
34 |
Locks |
$15,059.47 |
33 |
1 |
Mountain Bikes |
$34,305,864.29 |
2 |
12 |
Mountain Frames |
$4,511,170.68 |
4 |
35 |
Panniers |
|
36 |
13 |
Pedals |
$140,422.20 |
19 |
36 |
Pumps |
$12,695.18 |
34 |
2 |
Road Bikes |
$40,551,696.34 |
1 |
14 |
Road Frames |
$3,636,398.71 |
5 |
15 |
Saddles |
$52,526.47 |
26 |
22 |
Shorts |
$385,707.80 |
10 |
23 |
Socks |
$28,337.85 |
31 |
24 |
Tights |
$189,179.37 |
16 |
37 |
Tires and Tubes |
$224,832.81 |
13 |
3 |
Touring Bikes |
$13,334,864.18 |
3 |
16 |
Touring Frames |
$1,545,344.02 |
6 |
25 |
Vests |
$240,990.04 |
11 |
17 |
Wheels |
$648,240.04 |
8 |
创建排名值
获取行中某一给定值的排名值的方法之一是计算同一表中具有大于(或小于)要比较的值的行数。这一方法为表中的最高值返回空白或零值,而相等值将具有相同的排名值,下一个值(相等值之后的值)将具有非连续性的排名值。请参阅下面的示例。
通过使用以下公式创建一个新的计算列 SubCategorySalesRanking。
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
以下步骤更详细地描述计算方法。
EARLIER 函数获取表中当前行的 TotalSubcategorySales 的值。在本例中,因为该进程正在开始,所以它是表中的第一行。
EARLIER([TotalSubcategorySales]) 计算结果为 $156,167.88,即外部循环中的当前行。
FILTER 函数现在返回一个表,其中,所有行都具有大于 $156,167.88(这是 EARLIER 的当前值)的 TotalSubcategorySales 值。
COUNTROWS 函数计算筛选表中的行数并且将该值分配给当前行中的新计算列加 1。需要加上 1 以防止排名最高的值变为空白。
计算列公式移到下一行并且重复执行步骤 1 到 4。重复执行这些步骤,直到到达表的末尾。
EARLIER 函数将始终获取当前表运算之前的列的值。如果您需要从之前的循环获取值,请将第二个参数设置为 2。