我有一张包含多个值和类别的表格,我想计算每个类别的总和,然后创建一行来显示每个类别及其总值。我尝试将 unique 与sumif
and组合,textjoin
但无法正常工作。
以下是我所追求的。
例如说我有表FRUIT_SALES
水果种类 | 卖方 | 售出数量 |
---|---|---|
香蕉 | 新鲜杂货店 | 40 |
香蕉 | 大卖家 | 20 |
香蕉 | 农场摊位 | 50 |
苹果 | 榨汁机 | 400 |
苹果 | 农场摊位 | 10 |
我想使用单一公式生成一个按水果汇总的表格。
例如。
水果种类 | 售出数量 |
---|---|
苹果 | 410 |
香蕉 | 110 |
我使用唯一列表列出水果类型,并求和来计算销售数量,但我希望在一个公式中实现这一点,以便我可以使用文本连接将其转换为下面的文本。
“苹果 (410)、香蕉 (110)”
我的最终公式将包括另一个参数,但如果我可以从 FRUIT_SALES 获取到“苹果 410”、“香蕉 (110)”,它将为我提供我所需的基础。
答案1
您可以使用该LET
函数来执行此操作:
=LET(fruits, UNIQUE(FRUIT_SALES[Fruit Type]), sales, SUMIFS(FRUIT_SALES[No. Sold], FRUIT_SALES[Fruit Type], fruits), TEXTJOIN(", ", TRUE, fruits & " (" & sales & ")"))
fruits
表示水果列中的所有可能值。通过将其传递给 的第三个参数SUMIFS
,您可以创建一个与数组大小相同的数组fruit
,其中包含每种水果的总和。
该公式fruit & sales
只是将水果数组的第 n 个值与销售数组的第 n 个值连接起来。这将创建另一个相同大小的数组。
剩下的只是使用TEXTJOIN
这个连接数组并添加一些格式的问题。
如果您想要进一步定制:
- 将函数
SORT
或添加FILTER
到fruits
变量,以便对水果列表进行排序或过滤(例如,如果您想按客户过滤)。 - 使用该函数
TEXT
格式化sales
值。它对于处理小数或显示千位分隔符很有用。您还可以ROUND
在前面添加一个SUMIFS
以删除小数。
以下是该FILTER
函数的一个示例:
=LET(fruits, UNIQUE(FILTER(FRUIT_SALES[Fruit Type], FRUIT_SALES[Seller]=$B$11)), sales, SUMIFS(FRUIT_SALES[No. Sold],FRUIT_SALES[Fruit Type], fruits, FRUIT_SALES[Seller],$B$11), TEXTJOIN(", ", TRUE, fruits & " ("&sales&")"))
要生成中间摘要表,可以使用以下函数:
=LET(fruits, UNIQUE(FRUIT_SALES[Fruit Type]), sales, SUMIFS(FRUIT_SALES[No. Sold],FRUIT_SALES[Fruit Type], fruits), HSTACK(VSTACK("Fruit Type", fruits), VSTACK("Sales", sales)))