EARLIER

返回所述列的外部计算传递中指定列的当前值。

对于要将某个值用作输入并基于该输入生成计算的嵌套计算而言,EARLIER 非常有用。 在 Microsoft Excel 中,只能在当前行的上下文内执行此类计算;但是,在 DAX 中,可以存储输入的值,然后使用整个表中的数据进行计算。

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

语法

EARLIER(<column>, <number>)  

parameters

术语定义
解析为列的列或表达式。
num(可选)外部计算传递的正数。

下一个外部计算级别由 1 表示;两个外部级别由 2 表示,依此类推。

省略时,默认值为 1。

返回值

外部计算传递的数字所在列的当前行值

异常

错误说明

备注

  • 如果在表扫描开始之前存在行上下文,EARLIER 则成功。 否则它将返回错误。

  • EARLIER 的执行速度可能比较缓慢,因为从理论上讲,它可能需要执行大量操作,操作次数接近于总行数(列中)乘以相同数字(具体因表达式的语法而异)。 例如,如果列中有 10 行,则可能需要大约 100 次操作;如果有 100 行,则可能会执行接近 10,000 次操作。

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

注意

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

示例

为了说明 EARLIER 的用法,需要构建一个方案来计算排名值,然后在其他计算中使用此排名值。

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

此处显示包含排名列的最终表。

ProductSubcategoryKeyEnglishProductSubcategoryNameTotalSubcategorySalesSubcategoryRanking
18骑行背带短裤156,167.88 美元18
26自行车车架$220,720.7014
27单车存放架$35,628.6930
28瓶子和笼子$59,342.4324
5底托架$48,643.4727
6刹车装置$62,113.1623
19上限$47,934.5428
7Chains$8,847.0835
29清洁剂$16,882.6232
8牙盘$191,522.0915
9换挡装置$64,965.3322
30挡泥板$41,974.1029
10前叉$74,727.6621
20手套$228,353.5812
4把手$163,257.0617
11耳机$57,659.9925
31头盔$451,192.319
32水袋背包$96,893.7820
21运动衫$699,429.787
3336
34$15,059.4733
1山地自行车$34,305,864.292
12山地自行车车架$4,511,170.684
35挂包36
13脚踏板$140,422.2019
36打气筒$12,695.1834
2公路自行车$40,551,696.341
14公路自行车车架$3,636,398.715
15鞍座$52,526.4726
22短裤$385,707.8010
23袜子$28,337.8531
24紧身衣$189,179.3716
37轮胎和内胎$224,832.8113
3观光自行车$13,334,864.183
16观光自行车车架$1,545,344.026
25背心$240,990.0411
17车轮$648,240.048

创建排名值

获取行中给定值的排名值的一种方法是在同一表中对行数值大于(或小于)所比较的行进行计数。 此方法针对表中的最大值返回空白或零值,而相等的值将有相同的排名值,并且下一个值(在相等的值之后)将具有非连续的排名值。 请看以下示例。

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

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

以下步骤更详细地介绍了计算方法。

  1. EARLIER 函数获取表中当前行的 TotalSubcategorySales 值。 在此情况下,由于进程正在启动,所以获取的是表中的第一行

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

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

  4. COUNTROWS 函数对已筛选表的行进行计数,并将此值分配到当前行中新的计算列,并且加 1。 需要加 1 来防止顶部排名值变为空白。

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

EARLIER 函数将始终在当前表操作之前获取列值。 如果需要在此之前获取循环中的值,请将第二个参数设为 2。

另请参阅

EARLIEST 函数
筛选器函数

results matching ""

    No results matching ""