具有多个级别的 Countif 和 ArrayFormula
Countif and ArrayFormula with multiple levels
我有一个公式。它有效 - 但感觉它可以变得更简单。
我在多个专栏中有多个部门。每行都有一个我们正在跟踪的项目,每列都有一个状态文本,它会随着我们的工作而改变。
'queue' - 它正在排队等待完成并压低平均值
'active' - 进行中并提供平均值的一半值
'done', 'ok'd', 'rcvd' - 完成并计算最终平均值
'none' - 表示该部门在该职位上不活跃,不应计入最终平均值。
公式为:
=iferror(((ArrayFormula(sum(countif(B3:O3,{"done","ok'd","rcvd"}))))+(countif(B3:O3,"active")/2))/(counta(B3:O3)-(countif(B3:O3,"none"))),)
该公式有效,但我想看看是否有更简单的方法来处理它。在这种情况下,查询或数组修改会更好吗?
如果我想根据当前应用程序的语法添加其他文本字符串怎么办?
这里有一个 link 示例 sheet,在上下文中。
https://docs.google.com/spreadsheets/d/1zPFAcSxM7tYjZmlATYde7qKsDoeH6AW_xjFooOZFOf4/edit#gid=0
编辑:
作为后续问题 - 我如何让相同的东西跨栏工作?
我对解决方案进行了一些逆向工程,可以看到我的 sheet 顶部的公式有效 - 但它给了我一个错误:
"MMULT has incompatible matrix sizes. Number of columns in first matrix (13) must equal number of rows in second matrix (1)."
这是我添加的公式(它也在 linked sheet 中)。
=ARRAYFORMULA(IF(LEN(B4:N4), MMULT(IFERROR(( N(REGEXMATCH(B4:N9, "ok'd|done|ready|rcvd"))+ N(REGEXMATCH(B4:N9, "active"))/2)/MMULT(N(REGEXMATCH(B4:N9, "[^none]")),TRANSPOSE(ROW(B4:B9)^0)), 0), TRANSPOSE(ROW(B4:B9)^0)),))
=ARRAYFORMULA(IF(LEN(B3:B9), MMULT(IFERROR((
N(REGEXMATCH(B3:N9, "ok'd|done|ready|rcvd"))+
N(REGEXMATCH(B3:N9, "active"))/2)/MMULT(
N(REGEXMATCH(B3:N9, "[^none]")),
TRANSPOSE(COLUMN(B3:N3)^0)), 0),
TRANSPOSE(COLUMN(B3:N3)^0)), ))
As a followup question - how do I get the same thing to work across the columns?
=ARRAYFORMULA(TRANSPOSE(IF(LEN(TRANSPOSE(B4:N4)), MMULT(IFERROR((
N(REGEXMATCH(TRANSPOSE(B4:N16), "ok'd|done|ready|rcvd"))+
N(REGEXMATCH(TRANSPOSE(B4:N16), "active"))/2)/MMULT(
N(REGEXMATCH(TRANSPOSE(B4:N16), "[^none]")),
(ROW(B4:B16)^0)), 0),
(ROW(B4:B16)^0)), )))
我有一个公式。它有效 - 但感觉它可以变得更简单。
我在多个专栏中有多个部门。每行都有一个我们正在跟踪的项目,每列都有一个状态文本,它会随着我们的工作而改变。
'queue' - 它正在排队等待完成并压低平均值
'active' - 进行中并提供平均值的一半值
'done', 'ok'd', 'rcvd' - 完成并计算最终平均值 'none' - 表示该部门在该职位上不活跃,不应计入最终平均值。
公式为:
=iferror(((ArrayFormula(sum(countif(B3:O3,{"done","ok'd","rcvd"}))))+(countif(B3:O3,"active")/2))/(counta(B3:O3)-(countif(B3:O3,"none"))),)
该公式有效,但我想看看是否有更简单的方法来处理它。在这种情况下,查询或数组修改会更好吗?
如果我想根据当前应用程序的语法添加其他文本字符串怎么办?
这里有一个 link 示例 sheet,在上下文中。
https://docs.google.com/spreadsheets/d/1zPFAcSxM7tYjZmlATYde7qKsDoeH6AW_xjFooOZFOf4/edit#gid=0
编辑:
作为后续问题 - 我如何让相同的东西跨栏工作?
我对解决方案进行了一些逆向工程,可以看到我的 sheet 顶部的公式有效 - 但它给了我一个错误:
"MMULT has incompatible matrix sizes. Number of columns in first matrix (13) must equal number of rows in second matrix (1)."
这是我添加的公式(它也在 linked sheet 中)。
=ARRAYFORMULA(IF(LEN(B4:N4), MMULT(IFERROR(( N(REGEXMATCH(B4:N9, "ok'd|done|ready|rcvd"))+ N(REGEXMATCH(B4:N9, "active"))/2)/MMULT(N(REGEXMATCH(B4:N9, "[^none]")),TRANSPOSE(ROW(B4:B9)^0)), 0), TRANSPOSE(ROW(B4:B9)^0)),))
=ARRAYFORMULA(IF(LEN(B3:B9), MMULT(IFERROR((
N(REGEXMATCH(B3:N9, "ok'd|done|ready|rcvd"))+
N(REGEXMATCH(B3:N9, "active"))/2)/MMULT(
N(REGEXMATCH(B3:N9, "[^none]")),
TRANSPOSE(COLUMN(B3:N3)^0)), 0),
TRANSPOSE(COLUMN(B3:N3)^0)), ))
As a followup question - how do I get the same thing to work across the columns?
=ARRAYFORMULA(TRANSPOSE(IF(LEN(TRANSPOSE(B4:N4)), MMULT(IFERROR((
N(REGEXMATCH(TRANSPOSE(B4:N16), "ok'd|done|ready|rcvd"))+
N(REGEXMATCH(TRANSPOSE(B4:N16), "active"))/2)/MMULT(
N(REGEXMATCH(TRANSPOSE(B4:N16), "[^none]")),
(ROW(B4:B16)^0)), 0),
(ROW(B4:B16)^0)), )))