在 Google 工作表中按列聚合然后按行聚合而不添加列

Aggregating by columns and then by rows in Google Sheets without adding columns

我想对每一行中的列应用聚合函数,然后对结果应用另一个聚合,而不向 table 添加仅计算列。可以吗?

例如,考虑以下 table:

    A      B         C         D
1 Items Property1 Property2 Property3
2 Item1    Y                   Y
3 Item2                        Y
4 Item3              Y
5 Item4    Y         Y         Y

此处 Y(yes) 表示该项目具有给定的 属性.

我想计算至少具有 2 个属性的项目数。在这种情况下,它应该是 2(Item1 和 Item4)。我可以将 E 列添加到 table,例如:

Number of properties
COUNTIF(B2:D2, "Y")
COUNTIF(B3:D3, "Y")
COUNTIF(B4:D4, "Y")
COUNTIF(B5:D5, "Y")

并对其应用 COUNTIF(E2:E5, ">2")。但这需要在我想避免的 table 中添加一列。

当我破解时,我最终使用了 MMULT,例如:

=ARRAYFORMULA(COUNTIF(MMULT({if(B2:D5<>"", 1, 0)}, {1;1;1}), ">=2"))

这里的公式将 Y 和空格替换为 1 和 0,然后使用矩阵乘法计算每行中 1 的数量,然后计算结果行中至少具有 2 个属性的单元格的数量。但这感觉就像一个丑陋的黑客,恰好适用于我的情况。

有没有一种通用的方法可以通过独立的聚合函数按列然后按行进行这种双重聚合?

实际上,你的公式:

=ARRAYFORMULA(COUNTIF(MMULT({IF(B2:D="Y", 1, 0)}, {1;1;1}), ">=2"))

就在现场,除非您出于某些未提及的原因希望避免 MMULT...

替代方案可以是:

=ARRAYFORMULA(COUNTIF(LEN(SUBSTITUTE(
 TRANSPOSE(QUERY(TRANSPOSE(B2:D),,99^99)), " ", )), ">=2"))