将不同单元格中具有两个日期的数据集转换为系列或序列(Google 工作表)
Posted
技术标签:
【中文标题】将不同单元格中具有两个日期的数据集转换为系列或序列(Google 工作表)【英文标题】:Tranform Dataset With Two Dates In Different Cells into Series or Sequence (Google Sheet) 【发布时间】:2021-07-10 03:58:33 【问题描述】:我正在尝试将 google 表格中包含不同单元格中的两个日期的数据集转换为具有单列日期的数据系列。示例如下:
原始数据集:
ID | Start Date | End Date | Name | Category | Subcategory |
---|---|---|---|---|---|
10001 | 09/07/2021 | 11/07/2021 | Jona | A | A1 |
10002 | 10/07/2021 | 11/07/2021 | Adam | B | B1 |
需要:
ID | Date | Name | Category | Subcategory |
---|---|---|---|---|
10001 | 09/07/2021 | Jona | A | A1 |
10001 | 10/07/2021 | Jona | A | A1 |
10001 | 11/07/2021 | Jona | A | A1 |
10002 | 10/07/2021 | Adam | B | B1 |
10002 | 11/07/2021 | Adam | B | B1 |
我需要第二个数据结构来避免使用索引和匹配来查找具有多个条件的记录,这些条件需要很长时间(超过 3000 行)。此外,我需要它,以便我可以在需要日期系列的 Google Data Studio 中应用日期范围过滤器。
我所尝试的只是使用 Sequence 函数来填充两个给定日期之间的日期,但它只给了我一系列没有其他单元格数据的日期(我参考this method)。
你有什么想法吗?我会感谢你的帮助。非常感谢!
【问题讨论】:
【参考方案1】:SEQUENCE
运行良好,但不适用于 ARRAYFORMULA
。
试试REPT
:
=arrayformula(A1\"Date"\D1:F1;split(query(flatten(array_constrain(if(split(rept(10;C2:C-B2:B+1);0)=1;A2:A&char(9999)&B2:B+transpose(row(A:A))-1&char(9999)&D2:D&char(9999)&E2:E&char(9999)&F2:F;);counta(B2:B);max(C2:C-B2:B)+1));"where Col1 is not null";0);char(9999)))
由于array_constrain
,它也适用于每行开始日期与结束日期相同的异常情况。
在初始数组中counta(B2:B)
限制行,max(C2:C-B2:B)+1)
限制列。 +1
确保在每行的所有开始日期与结束日期相同时它仍然有效。
【讨论】:
太好了,效果很好!我一直在使用 Flatten 和 Split 函数将多列数据转换为单列,但是使用它们从包含两个日期范围的数据创建日期系列是下一个难度,但你刚刚想出了一个很棒的解决方案。非常感谢! 对于使用分号分隔符的您,您可能需要稍微修改一下公式,如下所示:=arrayformula(A1\"Date"\D1:F1; query(split(flatten(if(B2:B<>"";if(split(rept(10;C2:C-B2:B+1);0)=1;A2:A&char(9999)&B2:B+column(1:1)-1&char(9999)&D2:D&char(9999)&E2:E&char(9999)&F2:F;);));char(9999));"where Col1 is not null";0))
再次感谢 Aresvik!
不客气。乐意效劳。我刚刚更新了删除if(B2:B<>""
然后设置Col2 is not null
的解决方案。这有点简单。
关于您的解决方案,它可以正常工作,直到我发现多个记录包含相同的开始和结束日期的情况。当条件存在时,ID 会重复到一个月前。为了给你一个想法,请参考:link 我已经尝试弄清楚,但对我来说似乎很复杂。请帮助我阿瑞斯维克。
不确定发生了什么,但问题似乎是这种情况下的+column(1:1)-1
。我有一个使用array_constrain
的临时修复程序。解决方案已更新。以上是关于将不同单元格中具有两个日期的数据集转换为系列或序列(Google 工作表)的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一个 jupyter 笔记本单元格中显示多个熊猫系列直方图?
如何根据 c# winforms 中的列日期和名称将 sql 中的数据输入到特定的 datagridview 单元格中
r 由两个不同栅格确定的单元格中的栅格砖总和值,如何加快计算速度