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

以下步骤更详细地描述计算方法。

  1. EARLIER 函数获取表中当前行的 TotalSubcategorySales 的值。在本例中,因为该进程正在开始,所以它是表中的第一行。

  2. EARLIER([TotalSubcategorySales]) 计算结果为 $156,167.88,即外部循环中的当前行。

  3. FILTER 函数现在返回一个表,其中,所有行都具有大于 $156,167.88(这是 EARLIER 的当前值)的 TotalSubcategorySales 值。

  4. COUNTROWS 函数计算筛选表中的行数并且将该值分配给当前行中的新计算列加 1。需要加上 1 以防止排名最高的值变为空白。

  5. 计算列公式移到下一行并且重复执行步骤 1 到 4。重复执行这些步骤,直到到达表的末尾。

EARLIER 函数将始终获取当前表运算之前的列的值。如果您需要从之前的循环获取值,请将第二个参数设置为 2。

results matching ""

    No results matching ""