为什么定义名称前面的加号会影响封闭函数的结果?

Why does a plus sign in front of a defined name affects the results of enclosing function?

提问人:toaruScar 提问时间:6/24/2023 最后编辑:toaruScar 更新时间:6/25/2023 访问量:136

问:

首先,我来举个例子:

enter image description here

我每天都有一张球员的原始分数表,叫做“原始分数”。

enter image description here

我还有这个修改器表,我将应用于每个玩家的每日原始分数,它被称为“ScoreMod”。

enter image description here

我还有这张表来计算他们的总有效分数。它被称为“总计”。

为了计算每个玩家的每日有效分数(原始分数+修饰符),我使用以下函数。

=LET(
MyDate,    FILTER(RawScore[Date],RawScore[Name]=Total[@Name]),
MyRawScore,FILTER(RawScore[Score],RawScore[Name]=Total[@Name]),
MyModifier,XLOOKUP(
    MyDate,
    FILTER(ScoreMod[Date],     ScoreMod[Name]=Total[@Name],0),
    FILTER(ScoreMod[Modifier], ScoreMod[Name]=Total[@Name],0), 0),
MyModifier + MyRawScore)

如图所示,此功能工作正常。汤姆的有效分数计算正确。

enter image description here

然后,我将上述函数定义为 。EffectiveScore

但是,当我尝试在总分表中使用 Tom 的总分时,结果是不正确的,因为它变成了 300。=SUM(EffectiveScore)

但是如果我使用汤姆的总分,那么结果是正确的总分,280。=SUM(+EffectiveScore)

我的问题是,为什么没有 的公式不能让我得到正确答案,为什么添加一个可以得到正确的答案?++

文档链接:https://1drv.ms/x/s!At1ltp8PtMK-gpsP2cOPZStP89ozpw

Excel 公式 excel-365

评论

7赞 Jos Woolley 6/24/2023
很有意思。看起来需要额外的强制(例如,使用一元加号运算符)才能对数组进行操作,但仅当在定义的名称中使用时。,在工作表中使用,正确返回 3,但 如果存储为定义的名称 XLook,则返回不正确的 1,因为它解析为仅在 lookup_value 内对第一个元素进行操作,即等效于 。这在我看来是有缺陷的行为。XLOOKUP=SUM(XLOOKUP({"a","b"},{"a";"b";"c"},{1;2;3}))=XLOOKUP({"a","b"},{"a";"b";"c"},{1;2;3})=SUM(XLook)=SUM(XLOOKUP("a",{"a";"b";"c"},{1;2;3}))
3赞 Jos Woolley 6/24/2023
根据您的示例,其他函数似乎不会受到这种不一致的影响。,在工作表中,正确返回 3,但 也是如此,其中 MyFilter 是定义的名称。=SUM(FILTER({1;2;3},{1;1;0}))=SUM(MyFilter)=FILTER({1;2;3},{1;1;0})
1赞 P.b 6/24/2023
很好找到!@JosWoolley
4赞 David Leal 6/25/2023
我根据您的示例@JosWoolley做了一些额外的测试,使用作品。用或不用包装,但使用。工程。正如你所说,这似乎是一个错误。XMATCHXlookTOCOLTOROW=BYROW(Xlook, LAMBDA(x, SUM(x)))

答: 暂无答案