TLDR:是否可以缓存数组,或者将数组存储在单个单元格中,以避免在单个公式中重新计算两次?
想象一下我定义了一个函数FilterEqual
,它接受两个数组和一个常量作为输入,并返回第一个数组中的值,这些值对应于第二个中等于常量的值:
FilterEqual(xs, ys, z)
FilterEqual := [x for x,y in zip(xs,ys) if y == z]
我的数据具有以下(相关)结构:
ID Date Value
1 01/01/2011 3
2 09/01/2013 5
2 08/02/2014 33
3 03/04/2012 91
3 01/02/2000 26
我希望获得给定ID的最新值(按日期)。换句话说,我的输出应该是,在这个例子中:
ID Latest_Value
1 3
2 33
3 91
使用我的FilterEqual
函数,我可以使用单元格B2中的以下公式实现此目的:
B2 := INDEX(FilterEqual(Values, IDs, $A2), MATCH(MAX(FilterEqual(Dates, IDs, $A2)), FilterEqual(Dates, IDs, $A2)))
但是,计算FilterEqual(Dates, IDs, $A2)
两次显然效率很低。 (整个事情实际上是低效的 - 从过滤器中获取一系列ID然后将它们索引到日期和值范围会更简洁 - 但是现在让我们忽略它。)
如果这是一个正常的公式,并且FilterEqual(Dates, IDs, $A2)
是一些计算成本很高的值,我会将其缓存在一个中间列中:
ID Intermediate Latest_Value
1 _ 3
2 _ 33
3 _ 91
但是,如果我尝试使用FilterEqual(Dates, IDs, $A2)
的结果,这是一个数组,单元格将只存储数组的第一个值(而不是整个数组)。
是否可以缓存这样的中间数组值?
注意: