EARLIER

适用于:计算列计算表Measure视觉计算

返回所提及列的外部计算传递中指定列的当前 value。

EARLIER 可用于嵌套计算,其中你想要将特定 value 用作输入 and 基于该输入生成计算。 在 Microsoft Excel 中,只能在当前行的上下文中执行此类计算;但是,在 DAX 中,可以存储输入 valueand 然后使用整个表中的数据进行计算。

EARLIER 主要用于计算列的上下文中。

语法

EARLIER(<column>, <number>)

参数

术语 定义
column 解析为列的列 or 表达式。
num (可选)外部评估传递的正数。

next 评估级别由 1 表示;两个级别由 2 个 and 表示。

如果省略默认 value 为 1。

返回 value

外部评估传递的 value 行的当前 column(从 number开始)。

异常

错误说明

言论

  • EARLIER 成功 if 表扫描开始时存在行上下文。 否则,它将返回 error。

  • EARLIER 的性能可能很慢,因为从理论上讲,它可能需要执行一些接近总行数(在列中)的相同数目(具体取决于表达式的语法)的操作。 例如,if 列中有 10 行,可能需要大约 100 个操作;if 有 100 行,然后可能会执行接近 10,000 个操作。

  • 在计算列 not 行级别安全性 (RLS) 规则中使用时,or 支持在 DirectQuery 模式下使用此函数。

注意

在实践中,VertiPaq 内存中分析引擎执行优化以减少实际计算数,但在创建涉及递归的公式时应谨慎。

为了说明 EARLIER的使用,必须构建一个计算 rankvalueand 然后在其他计算中使用该 rankvalue 的方案。

以下示例基于此简单表 ProductSubcategory,其中显示了每个 ProductSubcategory 的总销售额。

此处显示了最后一个表,包括排名列。

ProductSubcategoryKey EnglishProductSubcategoryName TotalSubcategorySales SubcategoryRanking
18 Bib-Shorts $156,167.88 18
26 自行车架 $220,720.70 14
27 自行车看台 $35,628.69 30
28 瓶子 and 笼子 $59,342.43 24
5 下括号 $48,643.47 27
6 刹车 $62,113.16 23
19 $47,934.54 28
7 $8,847.08 35
29 清洁工 $16,882.62 32
8 Cranksets $191,522.09 15
9 脱轨器 $64,965.33 22
30 挡泥板 $41,974.10 29
10 $74,727.66 21
20 手套 $228,353.58 12
4 车把 $163,257.06 17
11 耳机 $57,659.99 25
31 头盔 $451,192.31 9
32 水化包 $96,893.78 20
21 球衣 $699,429.78 7
33 36
34 $15,059.47 33
1 山地自行车 $34,305,864.29 2
12 山架 $4,511,170.68 4
35 Panniers 36
13 踏板 $140,422.20 19
36 $12,695.18 34
2 公路自行车 $40,551,696.34 1
14 道路框架 $3,636,398.71 5
15 马鞍 $52,526.47 26
22 短裤 $385,707.80 10
23 袜子 $28,337.85 31
24 紧身 衣 $189,179.37 16
37 轮胎 and 管 $224,832.81 13
3 自行车之旅 $13,334,864.18 3
16 浏览帧 $1,545,344.02 6
25 背心 $240,990.04 11
17 车轮 $648,240.04 8

创建 RankValue

获取行中给定 rankvaluevalue 的一种方法是 count 同一表中 value 大(or 小)的行数。 此方法返回表中最高 blank 的 orvalue 零 value,而相等 values 将具有相同 rankvalueandnextvalue(等于 values后)将具有非连续 rankvalue。 请参阅下面的 sample。

使用以下公式创建一个新的计算列,SubCategorySalesRanking

= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1

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

  1. EARLIER 函数获取表中当前行的 value 的 。 在这种情况下,由于进程正在启动,因此它是表中 first 行

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

  3. FILTER 函数 now 返回一个表,其中 all 行的 valueTotalSubcategorySales 大于 $156,167.88(这是 value的当前 EARLIER)。

  4. COUNTROWS 函数对筛选表的行进行计数,and 将 value 当前行中的新计算列加上 1。 需要添加 1,以防止排名靠前的 value 成为 Blank。

  5. 计算列公式移动到 next 行 and 重复步骤 1 到 4。 这些步骤将重复,直到达到表的末尾。

在当前表操作之前,EARLIER 函数将始终获取列的 value。 If 需要从该循环获取 value,请将 second 参数设置为 2。

EARLIEST 函数Filter 函数