活动
早些时候
返回所提及列的外部计算传递中指定列的当前值。
EARLIER 可用于嵌套计算,其中你想要将特定值用作输入,并基于该输入生成计算。 在 Microsoft Excel 中,只能在当前行的上下文中执行此类计算;但是,在 DAX 中,可以存储输入的值,然后使用整个表中的数据进行计算。
EARLIER 主要用于计算列的上下文中。
EARLIER(<column>, <number>)
术语 | 定义 |
---|---|
column |
解析为列的列或表达式。 |
num |
(可选)外部评估传递的正数。 下一个评估级别由 1 表示;两个级别由 2 表示,依此表示。 如果省略默认值为 1。 |
外部评估传递的 number
行的当前值(从 column
开始)。
错误说明
如果表扫描开始前有行上下文,则
EARLIER
成功。 否则,它将返回错误。EARLIER
的性能可能很慢,因为从理论上讲,它可能需要执行一些接近总行数(在列中)的相同数目(具体取决于表达式的语法)的操作。 例如,如果列中有 10 行,可能需要大约 100 个操作:如果有 100 行,则可以执行接近 10,000 个操作。在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
备注
在实践中,VertiPaq 内存中分析引擎执行优化以减少实际计算数,但在创建涉及递归的公式时应谨慎。
为了说明使用 EARLIER,必须构建一个计算排名值的方案,然后在其他计算中使用该排名值。
以下示例基于此简单表 ProductSubcategory
,其中显示了每个 ProductSubcategory 的总销售额。
此处显示了最后一个表,包括排名列。
ProductSubcategoryKey | EnglishProductSubcategoryName | TotalSubcategorySales | SubcategoryRanking |
---|---|---|---|
18 | Bib-Shorts | $156,167.88 | 18 |
26 | 自行车架 | $220,720.70 | 14 |
27 | 自行车看台 | $35,628.69 | 30 |
28 | 瓶子和笼子 | $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 | 轮胎和管 | $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 |
获取行中给定值的排名值的一种方法是计算同一表中的值大于(或小于要比较的值)的行数。 此方法返回表中最高值的空白值或零值,而等值将具有相同的排名值,下一个值(等于值后)将具有非连续排名值。 请参阅以下示例。
使用以下公式创建一个新的计算列,SubCategorySalesRanking。
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
以下步骤更详细地描述了计算方法。
EARLIER
函数获取表中当前行 TotalSubcategorySales 的值。 在这种情况下,由于进程正在启动,因此它是表中的第一行EARLIER([TotalSubcategorySales])
计算结果为 $156,167.88,外部循环中的当前行。FILTER
函数现在返回一个表,其中所有行的值为 totalSubcategorySales 大于 $156,167.88(即EARLIER
的当前值)。COUNTROWS
函数对筛选表的行进行计数,并将该值分配给当前行中的新计算列加上 1。 需要添加 1,以防止排名靠前的值变为空白。计算列公式将移动到下一行,并重复步骤 1 到 4。 这些步骤将重复,直到达到表的末尾。
EARLIER
函数将始终在当前表操作之前获取列的值。 如果需要先从循环中获取值,请将第二个参数设置为 2。