我有一个Google Sheet文件,其数据如下所示:
这是一个列有日期。我正在试图找到一个单细胞公式,它能够计算本专栏中连续几天最长的连续时间。
我试过去找,但找不到。我想这需要一个复杂的查询/数组公式组合。
我可以在虚拟列的帮助下做到这一点,但这是一个交互式仪表板,所以我想保持它尽可能干净。我希望这有道理..。
下面是一个包含示例数据和首选结果的文档:https://docs.google.com/spreadsheets/d/14h241HNpgqq8T5cizR8UPF0NgUSm_kBb6RWpnnPSQLc/edit?usp=sharing
任何帮助都是非常感谢的!
发布于 2022-08-10 16:42:20
我的工作基础是您可以使用here的想法,但这并不像我最初想的那样简单,因为在日期列表中没有空白,您只是从一系列日期跳转到下一个日期。但是,我认为您仍然可以使用频率,类似这样的:
=ArrayFormula(frequency(if(countif(A5:A23,A5:A23-1),row(A5:A23)),if(countif(A5:A23,A5:A23-1)=0,row(A5:A23))))
因此,我在每条条纹的开头加上一个零,如下所示:
频率是这样出来的:
正如您所看到的,每个频率计数都比与之相关的条纹长度少一个。这是因为我使用“0”作为频率的bin范围,因此在每个组中丢失了一个数据点。我认为只需在每个组中增加1就可以得到实际的条纹长度,所以我建议的最大条纹长度公式是:
=ArrayFormula(max(frequency(if(countif(A5:A,A5:A-1),row(A5:A)),if(countif(A5:A,A5:A-1)=0,row(A5:A)))+1))
由于组的数目比零的数目多一个,所以最近的连列是由以下方法提供的:
=ArrayFormula(index(frequency(if(countif(A5:A,A5:A-1),row(A5:A)),if(countif(A5:A,A5:A-1)=0,row(A5:A)))+1,countifs(countif(A5:A,A5:A-1),0,A5:A,"<>")+1))
待办
我认为走到这一步,我应该能够开始和结束最长和最近的连胜。
发布于 2022-08-10 19:06:52
尝试:
=INDEX(COLUMNS(SPLIT(FLATTEN(SPLIT(TRIM(QUERY(
IF(A5:A-A6:A=-1, 1, 0),,9^9)), " 0 ", )), " "))+1)
备选方案:
=ARRAYFORMULA(MAX(LEN(SUBSTITUTE(FLATTEN(SPLIT(QUERY(IF(
FILTER(A5:A-A6:A, A5:A<>"")=-1, "♦", "♦×"),,9^9), "×")), " ", ))))
=ARRAYFORMULA(REGEXEXTRACT(QUERY(LEN(SUBSTITUTE(FLATTEN(SPLIT(QUERY(IF(
FILTER(A5:A-A6:A, A5:A<>"")=-1, "♦", "♦×"),,9^9), "×")), " ", )),,9^9), "\d+$")*1)
https://stackoverflow.com/questions/73302673
复制相似问题