EARLIER
返回所提及列的外部计算传递中指定列的当前 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
以下步骤更详细地描述了计算方法。
EARLIER
函数获取表中当前行的 value 的 。 在这种情况下,由于进程正在启动,因此它是表中 first 行EARLIER([TotalSubcategorySales])
计算结果为 $156,167.88,外部循环中的当前行。FILTER
函数 now 返回一个表,其中 all 行的 valueTotalSubcategorySales 大于 $156,167.88(这是 value的当前EARLIER
)。COUNTROWS
函数对筛选表的行进行计数,and 将 value 当前行中的新计算列加上 1。 需要添加 1,以防止排名靠前的 value 成为 Blank。计算列公式移动到 next 行 and 重复步骤 1 到 4。 这些步骤将重复,直到达到表的末尾。
在当前表操作之前,EARLIER
函数将始终获取列的 value。
If 需要从该循环获取 value,请将 second 参数设置为 2。