【问题标题】:Google Sheet Query complaining of Column with date value having no date value - is this a bug?谷歌表格查询抱怨日期值没有日期值的列 - 这是一个错误吗?
【发布时间】:2020-09-09 22:36:29
【问题描述】:

我有以下(从原始简化)公式,它从另一张纸(原始公式中的多张纸)中提取数据并根据另一列的月()值计算一列的总和:

=QUERY({
IFERROR(IMPORTRANGE('C1'!$B$5, "PLACEMENTS!A4:L1000"), {"",TO_DATE(0),"","","","","","","","","",""})},
"SELECT SUM(Col8) WHERE Col2 IS NOT NULL AND month(Col2)+1="& MONTH($A3) &" AND Col1="""&B$2&""""& IF(NOT($C$1="ALL"), "AND Col6="""&$C$1&"""" ,)&  " label SUM(Col8) ''",0)

我不断收到 #VALUE! 错误:

无法解析函数 QUERY 参数 2 的查询字符串:不能 在不是 Date 或 a 的列上执行功能 month 日期时间列

如果我将 IFERROR 包装器删除到 IMPORTRANGE 语句中,那么错误就会消失,并且如您所见,在 IMPORTRANGE 语句出现错误的情况下,一个带有 Col2 设置为插入TO_DATE(0) 的日期。

这个没有IFERROR 的公式可以正常工作,并且拉入行并提供SUM 值:

=QUERY({IMPORTRANGE('C1'!$B$5, "PLACEMENTS!A4:L1000")},"SELECT SUM(Col8) WHERE Col2 IS NOT NULL AND month(Col2)+1="& MONTH($A3) &" AND Col1="""&B$2&""""& IF(NOT($C$1="ALL"), "AND Col6="""&$C$1&"""" ,)&  " label SUM(Col8) ''",0)

这里是一个示例表的链接,该公式使用相同的数据结构从中导入:Sample Sheet Data

如果Query 在没有IFERROR 包装器的情况下工作,为什么它会在IFERROR 包装器到位的情况下产生关于Col2 的错误,在这种情况下不应触发?这个完全相同的公式适用于另一个用户的电子表格。这是谷歌表格/查询错误还是我在这里做错了什么?谢谢

【问题讨论】:

  • 您能否在您的问题中提供有效的和无效的完整公式?还提供一个示例电子表格有助于排除故障。
  • @ziganotschka 我已经添加了有效的公式,但不幸的是我无法提供一个有效的示例电子表格,因为它包含财务数据。谢谢
  • 只要格式相同,您就可以提供带有假值的虚拟电子表格。
  • @ziganotschka 我现在用示例数据的链接更新了问题。

标签: mysql sql google-sheets


【解决方案1】:

IFERROR(exp1,exp2) 等价于 IF(NOT(ISERROR(exp1)),exp1,exp2)

但是,虽然第一个选项并不总是与查询兼容,但第二个更是如此。

在你的情况下改变

IFERROR(IMPORTRANGE('C1'!$B$5, "PLACEMENTS!A4:L1000"), {"",TO_DATE(0),"","","","","","","","","",""}

IF(NOT(ISERROR(importrange('C1'!$B$5, "PLACEMENTS!A4:L1000"))),importrange('C1'!$B$5, "PLACEMENTS!A4:L1000"), {"",TO_DATE(0),"","","","","","","","","",""})

会解决问题的。

【讨论】:

  • 有趣并感谢您提供解决方案的回复。我使用了您修改后的公式,它确实有效,尽管当 IMPORTRANGE 没有提取任何可用数据时出现其他错误。我现在使用了一个不同的公式,它对每个外部工作表进行单独的查询,并用IFERROR 并且他们对所有这些都使用 SUM,这似乎有效。出于好奇 - 为什么您提供的变体与查询更“兼容”?
  • 不幸的是,我无法回答“为什么”——它必须与后台公式的实现有关——但我过去已经注意到 IFERROR 通常不能与其他公式结合使用,尤其是数组公式。我希望这份工作对您有用,即使我无法向您解释确切的原因。
【解决方案2】:

您尚未共享您正在处理的工作表快照,并且很难知道您的公式中发生了什么。

答案已更新

IFERROR 函数给出{"",TO_DATE(0),"","","","","","","","","",""} 以防第一个参数为假,即产生错误的数组。

Select 子句中的 Query 函数中,您正在执行 Sum(Col8) 需要一个数字进行求和,但在数组中,您要在位置 8一个空字符串。您只需要在索引 8 处添加零 {"",TO_DATE(0),"","","","","",0,"","","",""}

【讨论】:

  • 'C1'!$B$5 的公式实际上是对有效工作表 ID 的单元格引用,并且工作正常。同样,双引号是必要的,因为我使用 IF 子句插入和退出查询语句。我已经用示例数据的链接更新了主要问题。
  • 感谢您更新答案。不幸的是,它不能解决问题。据我所知,IFERROR 无论如何都不应该被“激活”,因为IMPORTRANGE 确实完成而没有错误。奇怪的是,我收到了关于 Col2 的错误。在位置 8 处添加 0 也没有任何区别。
  • 如果第 8 列中有任何不是日期的值,则检查导入数据的同一列...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多