你实际上非常接近正确的解决方案,因为tbl.CalculateColumn()
允许你对列中的值进行任何你喜欢的操作,所以在这种情况下,将一个表函数如tbl.Filter()
应用到一列表中就是做正确的事情。难度实际上是在代码片段中获取嵌套引号。
Schematiq允许您使用的片段是单或双引号,你正在做的,然而你传递给'tbl.Filter()'
需要有大约SPOT2
否则引号内片段(Excel公式中)SPOT2
被视为一个命名范围而不是文本。要在报价内写文字的报价,你要加倍,所以下面应该为你工作:
=tbl.CalculateColumn(C23,"Result","r =>tbl.Filter(r,'tier_info2','=''SPOT2''')")
(请注意,我已经添加了两个单引号任SPOT2
侧)
所有这些引用的嵌套虽然有些尴尬,但是一种替代方法是将片段移动到它自己的单元格中。这也可能使你的表位更容易阅读:
C24: r => tbl.Filter(r, "tier_info2", "='SPOT2'")
C25: =tbl.CalculateColumn(C23, "Result", C24)
通过片断移动到自己的细胞,没有必要包装在双引号整个事情,这样你就可以使用双引号将片段和围绕文本值的单引号。
另一种选择是使所述内过滤器段到输入的功能,并使用fn.FixInput()
提供其值,以计算:
C24: (fn, tbl) => tbl.Filter(tbl, 'tier_info2', fn)
C25: '='SPOT2'
C26: =tbl.CalculateColumn(C23, "Result", fn.FixInput(C24, C25))
fn.FixInput()
修正输入到代码段fn
在C24
总是成为C25
的片段,然后tbl.CalculateColumn()
通过传递列值作为其余的tbl
输入来应用该函数。通过分离这两个片段,可以更容易地查看并稍后修改过滤器逻辑(如果需要)。当然,这种方法也可以合并回到一个单元格中,如果您希望将公式保留在一个单元格中,我将推荐这种方法:
=tbl.CalculateColumn(C23,"Result", fn.FixInput("(fn, tbl) => tbl.Filter(tbl, 'tier_info2', fn)", "='SPOT2'"))