0

我正在尝试使用 TEXTJOIN 和 FILTER 并引用溢出范围来查询存储在 Excel 中的销售列表,但这不起作用。

这是上下文:

  • 我有一个tabSales包含销售额的表格,其中包含以下数据:日期、客户、金额、年份(使用计算=YEAR([Date]

  • 我想在每年的报告表上以合并文本的形式显示该年度销售商品的客户列表(例如 2020 ⇨ “John Smith, Alan Dulles”)

这是我在报告表上尝试过的:

  • 我已经使用SORTandUNIQUE函数使 D 列上的报告显示发生一些销售的年份列表:(=SORT(UNIQUE(tabSales[Year]), , -1)单元格 A2 中的公式输入)

  • 然后,我尝试使用JOINTEXTandFILTER函数和 Excel 的溢出范围功能来显示每一年的所有客户的列表,这些客户在那一年卖掉了一些东西:=JOINTEXT(",", TRUE, FILTER(tabSales[Customer],tabSales[Year]=A2#))(B2 中的公式输入)

不幸的是,最后一个公式不起作用:

  • Excel 在 B2 中返回 #N/A
  • B2 不会溢出 B3、B4、...

没有溢出让我想知道FILTER函数中的 # 引用是否被识别......

我怎样才能让这个公式起作用?

具有 TEXTJOIN 功能的销售表 报告不起作用

4

1 回答 1

1

在您的 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中,该 cStr执行逐行 textjoin(在这种情况下,它是逐年)。最后一行使用 CHOOSE 将唯一年份 ( uYrs ) 与 cStr 合并到一个动态数组中。

结果是一个动态数组,以降序排列的年份和按年份连接的唯一客户名称溢出。仅对最近一年进行排序,但这不是必需的。它可能是一个多行的功能,但公式已经很长了。

结果

将近三个月后,我确信这没有任何价值,但出于好奇,我得到了一个可行的解决方案,并认为也许值得发布。在这种情况下,重要的不是答案,而是方法。

于 2021-07-09T06:19:32.050 回答