将 TEXTJOIN 与 FILTER 结合使用并引用溢出范围
Use TEXTJOIN with FILTER and reference to a spill range
我正在尝试使用 TEXTJOIN 和 FILTER 并引用溢出范围来查询存储在 Excel 中的销售列表,但这不起作用。
上下文如下:
我有一个包含销售额的 table tabSales
,具有以下数据:日期、客户、金额、年份(使用 =YEAR([Date]
计算)
我想在报告 sheet 上显示每年作为合并文本出售某物的客户列表(例如 2020 ⇨“John Smith, Alan Dulles ")
这是我在报告中尝试过的 sheet:
我使用了 SORT
和 UNIQUE
函数使报表在 D 列上显示发生某些销售的年份列表:=SORT(UNIQUE(tabSales[Year]), , -1)
(公式在单元格 A2 中输入)
然后我尝试使用 JOINTEXT
和 FILTER
函数以及 Excel 的溢出范围功能来显示每年所有客户的列表那一年谁卖了东西:=JOINTEXT(",", TRUE, FILTER(tabSales[Customer],tabSales[Year]=A2#))
(B2中输入的公式)
不幸的是,最后一个公式不起作用:
- Excel returns B2
中的#N/A
- B2 不会溢出 B3、B4、...
缺少溢出让我怀疑 FILTER
函数中的 # 引用是否被识别...
我怎样才能让这个公式起作用?
Sales table
Report with TEXTJOIN function not working
在你的 A2 中,你可以这样做:
=LET( data, tabSales[[Date]:[Customer]],
sData, SORTBY(data,INDEX(data,,1),-1),
yr, YEAR(INDEX(sData, , 1)), cust, INDEX(sData, , 2),
uYrs, TRANSPOSE(SORT(UNIQUE(yr),,-1)),
CTA, SORT(UNIQUE(TRANSPOSE(IF(yr=uYrs,cust,"")),TRUE),,,TRUE),
cStr, LET( m, CTA,
rSeq, SEQUENCE( ROWS(m) ),
L, MMULT( LEN(m)--(m<>""), SIGN( SEQUENCE( COLUMNS(m) ) ) ) - 1,
i, MMULT(--( TRANSPOSE( rSeq ) < rSeq ), L ) + rSeq,
IFERROR( MID( TEXTJOIN( ",", TRUE, m ), i, L ), "" ) ),
CHOOSE( {1,2}, TRANSPOSE(uYrs), cStr ) )
其中输入是原始销售日期和客户名称,作为放置在 data 中的动态数组。由于 tabSales 的结构适用于此方法,此方法从日期计算年份而不是将其作为输入。
这是一个沉重的解决方案,如果是我,我会把你的公式放在 B2 中并拖下来。但我偶然发现了你的问题并意识到它与这个问题的相似之处: 这似乎是一个普遍的问题类型。因此,将一个解决方案放入另一个解决方案似乎是合乎逻辑的。
LET 的第一部分将数据分解为客户和年份,并形成一个排序的唯一数组,称为 CTA(客户时间线数组)。然后将其输入 cStr 进行逐行文本连接(在这种情况下,它是逐年)。最后一行使用 CHOOSE 将唯一年份 (uYrs) 与 cStr 合并到一个动态数组中。
结果是一个动态数组,其中包含按降序排列的年份和按年份连接的唯一客户名称。仅对最近一年进行排序,但这不是必需的。可能是多几行的特征,但是公式已经很长了。
将近三个月后,我确信这没有任何价值,但出于好奇,我得到了一个可行的解决方案,并认为也许值得发布。在这种情况下,重要的不是答案,而是方法。
我正在尝试使用 TEXTJOIN 和 FILTER 并引用溢出范围来查询存储在 Excel 中的销售列表,但这不起作用。
上下文如下:
我有一个包含销售额的 table
tabSales
,具有以下数据:日期、客户、金额、年份(使用=YEAR([Date]
计算)我想在报告 sheet 上显示每年作为合并文本出售某物的客户列表(例如 2020 ⇨“John Smith, Alan Dulles ")
这是我在报告中尝试过的 sheet:
我使用了
SORT
和UNIQUE
函数使报表在 D 列上显示发生某些销售的年份列表:=SORT(UNIQUE(tabSales[Year]), , -1)
(公式在单元格 A2 中输入)然后我尝试使用
JOINTEXT
和FILTER
函数以及 Excel 的溢出范围功能来显示每年所有客户的列表那一年谁卖了东西:=JOINTEXT(",", TRUE, FILTER(tabSales[Customer],tabSales[Year]=A2#))
(B2中输入的公式)
不幸的是,最后一个公式不起作用:
- Excel returns B2 中的#N/A
- B2 不会溢出 B3、B4、...
缺少溢出让我怀疑 FILTER
函数中的 # 引用是否被识别...
我怎样才能让这个公式起作用?
Sales table Report with TEXTJOIN function not working
在你的 A2 中,你可以这样做:
=LET( data, tabSales[[Date]:[Customer]],
sData, SORTBY(data,INDEX(data,,1),-1),
yr, YEAR(INDEX(sData, , 1)), cust, INDEX(sData, , 2),
uYrs, TRANSPOSE(SORT(UNIQUE(yr),,-1)),
CTA, SORT(UNIQUE(TRANSPOSE(IF(yr=uYrs,cust,"")),TRUE),,,TRUE),
cStr, LET( m, CTA,
rSeq, SEQUENCE( ROWS(m) ),
L, MMULT( LEN(m)--(m<>""), SIGN( SEQUENCE( COLUMNS(m) ) ) ) - 1,
i, MMULT(--( TRANSPOSE( rSeq ) < rSeq ), L ) + rSeq,
IFERROR( MID( TEXTJOIN( ",", TRUE, m ), i, L ), "" ) ),
CHOOSE( {1,2}, TRANSPOSE(uYrs), cStr ) )
其中输入是原始销售日期和客户名称,作为放置在 data 中的动态数组。由于 tabSales 的结构适用于此方法,此方法从日期计算年份而不是将其作为输入。
这是一个沉重的解决方案,如果是我,我会把你的公式放在 B2 中并拖下来。但我偶然发现了你的问题并意识到它与这个问题的相似之处:
LET 的第一部分将数据分解为客户和年份,并形成一个排序的唯一数组,称为 CTA(客户时间线数组)。然后将其输入 cStr 进行逐行文本连接(在这种情况下,它是逐年)。最后一行使用 CHOOSE 将唯一年份 (uYrs) 与 cStr 合并到一个动态数组中。
结果是一个动态数组,其中包含按降序排列的年份和按年份连接的唯一客户名称。仅对最近一年进行排序,但这不是必需的。可能是多几行的特征,但是公式已经很长了。
将近三个月后,我确信这没有任何价值,但出于好奇,我得到了一个可行的解决方案,并认为也许值得发布。在这种情况下,重要的不是答案,而是方法。