如何在有限制的日期范围的子集中计算网络日?
How to count networkdays in a subset of a date range with restrictions?
演示工作簿在这里,现在有公式:https://docs.google.com/spreadsheets/d/1uj5P17iIesV6tEIwt00jUqJQdipxubk18CfV0uZshgU/edit?usp=sharing
这个问题非常相似,但又不同于: .
我有一份职位空缺列表(“输入”选项卡),我需要跟踪这些职位以获取每月指标。我的指标需要计算每个月开放时间 <=10 个工作日和开放时间 >10 个工作日的职位空缺数量,忽略假期。
每个月的总数需要计算该月和任何前一个月的净工作天数。但是,它不能计算该月结束后的任何天数。任何未关闭的开盘需要从开盘日算到今天()。
例如,一份工作于 2020 年 12 月 31 日开始,于 2021 年 1 月 14 日结束。尽管该职位在 1 月份仅空缺 10 个工作日,但由于比前几个月多了 1 个工作日,因此计算为 >10。
一份在 2021 年 1 月 29 日开始工作并在 2021 年 3 月 1 日结束的工作在 1 月份将计为 <=10 天,因为只有 1 个工作日; 2 月 >10,因为总共有 21 个工作日; 3 月 >10,因为有 22 个工作日。
在演示工作簿的“月度指标”选项卡上,我需要一个公式来使用“输入”选项卡中的数据使 B8:D9 匹配 B2:D3 中的答案。
我在 B8 中计算 12 月开放 <=10 天的工作的公式是:
=if(EOMonth(B$7,0)
+if(EOMonth(B$7,0)=B$7, networkdays(输入!$C$2:$C,EOMonth(B$7,0))<=10 ))),(countA(过滤器(输入!$A$2:$A,输入!$B$2:$B="关闭", 输入!$D$2:$D<=EOMonth(B$7,0), 输入!$D$2:$D>=B$7, networkdays(输入!$C$2:$C,输入!$D$2:$D)<=10))))
我在 B9 中计算 12 月开放 >10 天的职位的公式是:
=if(EOMonth(B$7,0)10)), (countA(filter(Inputs!$A$2 :$A,Inputs!$B$2:$B="open", Inputs!$C$2:$C<=EOMonth(B$7,0), networkdays(Inputs!$C$2:$C,today()) >10))))
+if(EOMonth(B$7,0)=B$7, networkdays(输入!$C$2:$C,EOMonth(B$7,0))>10) )),(countA(过滤器(输入!$A$2:$A,输入!$B$2:$B="关闭",输入!$D$2:$D<=EOMonth(B$7,0),输入! $D$2:$D>=B$7, networkdays(输入!$C$2:$C,输入!$D$2:$D)>10))))
如您所见,计数相差甚远,我无法将逻辑直接记在脑海中或写在纸上,足以弄清楚。
校验和 - 每个周期的网络天数:
={"Checksum"; INDEX(NETWORKDAYS(C2:C11, IF(D2:D11="", TODAY(), D2:D11)))}
每月工作天数:
=INDEX(IFNA(VLOOKUP(ROW(A1:A11)&"", QUERY({TEXT(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"), {"#", "yyy-mm"}), NETWORKDAYS(
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"),,2),
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(D2:D11)&"×"&IF(D2:D11="", TODAY(), D2:D11), ".*"&VALUE(UNIQUE(FLATTEN(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), )))))&"'"), "×"),,2))},
"select Col1,sum(Col3) group by Col1 pivot Col2 label Col1'1'"), SEQUENCE(1, COUNTUNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), )))+1, 0)))
您的月度指标为:
=INDEX(REGEXREPLACE(QUERY(QUERY(SPLIT(FLATTEN(TEXT(TRANSPOSE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), ))), "yyymm\¤mmm-yyy")&"×"&
REGEXREPLACE(REGEXREPLACE(QUERY(QUERY({TEXT(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"), {"#", "yyy-mm"}), NETWORKDAYS(
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"),,2),
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(D2:D11)&"×"&IF(D2:D11="", TODAY(), D2:D11), ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), ))))&"'"), "×"),,2))},
"select sum(Col3) group by Col1 pivot Col2"), "offset 1", 0)&"", "(\b([0-9]|10)\b)", "×# Jobs open <= 10 business days")&"", "(.*\d$)", "×# Jobs open > 10 business days")), "×"),
"where Col2 is not null"), "select Col3,count(Col2) group by Col3 pivot Col1")&"", "(.*¤)", ))
演示工作簿在这里,现在有公式:https://docs.google.com/spreadsheets/d/1uj5P17iIesV6tEIwt00jUqJQdipxubk18CfV0uZshgU/edit?usp=sharing
这个问题非常相似,但又不同于:
我有一份职位空缺列表(“输入”选项卡),我需要跟踪这些职位以获取每月指标。我的指标需要计算每个月开放时间 <=10 个工作日和开放时间 >10 个工作日的职位空缺数量,忽略假期。
每个月的总数需要计算该月和任何前一个月的净工作天数。但是,它不能计算该月结束后的任何天数。任何未关闭的开盘需要从开盘日算到今天()。
例如,一份工作于 2020 年 12 月 31 日开始,于 2021 年 1 月 14 日结束。尽管该职位在 1 月份仅空缺 10 个工作日,但由于比前几个月多了 1 个工作日,因此计算为 >10。
一份在 2021 年 1 月 29 日开始工作并在 2021 年 3 月 1 日结束的工作在 1 月份将计为 <=10 天,因为只有 1 个工作日; 2 月 >10,因为总共有 21 个工作日; 3 月 >10,因为有 22 个工作日。
在演示工作簿的“月度指标”选项卡上,我需要一个公式来使用“输入”选项卡中的数据使 B8:D9 匹配 B2:D3 中的答案。
我在 B8 中计算 12 月开放 <=10 天的工作的公式是:
=if(EOMonth(B$7,0) +if(EOMonth(B$7,0) 我在 B9 中计算 12 月开放 >10 天的职位的公式是: =if(EOMonth(B$7,0) +if(EOMonth(B$7,0) 如您所见,计数相差甚远,我无法将逻辑直接记在脑海中或写在纸上,足以弄清楚。
校验和 - 每个周期的网络天数:
={"Checksum"; INDEX(NETWORKDAYS(C2:C11, IF(D2:D11="", TODAY(), D2:D11)))}
每月工作天数:
=INDEX(IFNA(VLOOKUP(ROW(A1:A11)&"", QUERY({TEXT(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"), {"#", "yyy-mm"}), NETWORKDAYS(
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"),,2),
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(D2:D11)&"×"&IF(D2:D11="", TODAY(), D2:D11), ".*"&VALUE(UNIQUE(FLATTEN(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), )))))&"'"), "×"),,2))},
"select Col1,sum(Col3) group by Col1 pivot Col2 label Col1'1'"), SEQUENCE(1, COUNTUNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), )))+1, 0)))
您的月度指标为:
=INDEX(REGEXREPLACE(QUERY(QUERY(SPLIT(FLATTEN(TEXT(TRANSPOSE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), ))), "yyymm\¤mmm-yyy")&"×"&
REGEXREPLACE(REGEXREPLACE(QUERY(QUERY({TEXT(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"), {"#", "yyy-mm"}), NETWORKDAYS(
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(C2:C11)&"×"&C2:C11, ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), -1)+1)))&"'"), "×"),,2),
INDEX(SPLIT(QUERY(FLATTEN(IF(DAYS(IF(D2:D11="",TODAY(), D2:D11), C2:C11)>=
SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), ROW(C2:C11)&"×"&C2:C11+SEQUENCE(1, MAX(DAYS(IF(D2:D11="", TODAY(), D2:D11), C2:C11)+1), ), NA())),
"where Col1 matches '"&TEXTJOIN("|", 1, ROW(D2:D11)&"×"&IF(D2:D11="", TODAY(), D2:D11), ".*"&VALUE(UNIQUE(EOMONTH(SEQUENCE(TODAY()-MIN(C2:C11), 1, MIN(C2:C11)), ))))&"'"), "×"),,2))},
"select sum(Col3) group by Col1 pivot Col2"), "offset 1", 0)&"", "(\b([0-9]|10)\b)", "×# Jobs open <= 10 business days")&"", "(.*\d$)", "×# Jobs open > 10 business days")), "×"),
"where Col2 is not null"), "select Col3,count(Col2) group by Col3 pivot Col1")&"", "(.*¤)", ))