arrays - 谷歌表格公式解释
问题描述
我在 StackOverflow 上问了一个问题:Google Sheets: Join two tables together
我必须弄清楚如何动态地将两个表连接在一起。我从@MattKing 那里得到了关于如何解决我的问题的答案,他的解决方案适用于我创建的示例数据。但是,他的解决方案将两个表合并为一个query()
,我无法理解它是如何工作的,所以我需要帮助理解该公式。除非我了解它是如何工作的,否则我无法在我的实际工作表上实现它。
我需要理解的公式:=ARRAYFORMULA(QUERY({A3:G;{H4:I,IFERROR(ROW(H4:H)/{0,0,0,0}),J4:J}},"select Col1,Col2,SUM(Col3),SUM(Col4),SUM(Col5),SUM(Col6),SUM(Col7) where Col1 is not null group by Col1,Col2 label SUM(Col3)'Impressions',SUM(Col4)'Clicks',SUM(Col5)'Cost',SUM(Col6)'Leads',SUM(Col7)'Offline Leads'"))
我对此感到困惑的公式的一部分:QUERY({A3:G;{H4:I,IFERROR(ROW(H4:H)/{0,0,0,0}),J4:J}}
非常感谢您帮助找出这个很棒的公式!
解决方案
如果你运行这个公式,你可以看到发生了什么:
=ARRAYFORMULA({A3:G10; {H4:I10, IFERROR(ROW(H4:H10)/{0,0,0,0}), J4:J10}})
但基本上这是一种用除零来抵消列的方法,这将输出#DIV错误,因为任何除以0的东西在谷歌表格中都被认为是不合逻辑的。所以...
=ROW(H4:H)
将为您提供从 4 开始的每行的行号,例如:
4
5
6
...
然后除以 4 列 / 4 个零,得到以下数组:
#DIV | #DIV | #DIV | #DIV
#DIV | #DIV | #DIV | #DIV
#DIV | #DIV | #DIV | #DIV
...
包含在内,IFERROR
因此所有#DIV
错误都无效,这意味着您剩下 4 个空列
所以我们有 H4:I 中的任何内容然后我们继续使用 4 个空列然后最后一列是 J4:J 所以这样你总共有 7 个列
然后将这 7 列与 A3:G 列中的任何内容再次放入数组中,例如:
A:A B:B C:C D:D E:E F:F G:G
H:H I:I #DIV #DIV #DIV #DIV J:J
之所以需要像上面介绍的那样是因为QUERY
当您使用诸如sum
, min
, max
,之类的操作时需要聚合列avg
推荐阅读
- c# - 如何运行现有的 ASP.NET C# Web 应用项目
- python - 在 spark 的最后一个 RDD 中运行一个函数
- bash - 一年中每个月的第一个周日到周六如何截断?
- php - JWT 或 HTTP 授权标头在实时服务器上不起作用
- vba - 活动单元对齐
- flutter - GridView 内的 Flutter Container
- c# - 根据类中的值突出显示 ListBox 项
- amazon-ecs - aws-ecs-patterns 错误:此服务的集群需要 Ec2 容量。在集群上调用 addXxxCapacity()
- sql - Postgresql 按数组重叠排序
- datatable - antd Table在datasource数据发生变化时不会自动重新渲染