在Google Apps脚本中查询 - Arrayformula错误

时间:2017-02-07 20:01:10

标签: sql google-apps-script google-sheets google-visualization

我在google工作表(here's a copy)中有一个行为不端的查询。我正在使用此工作表作为用户反馈的后端(通过表单),并为其创建一个错误跟踪器/功能请求表,用于专有应用程序。

有问题的查询位于主标签上,G列:

=ARRAYFORMULA(
  IF(FormResponses!D2:D = "Bug report",
    QUERY(FormResponses!A2:O, "SELECT E,F WHERE D ='Bug report'",0), 
  IF(FormResponses!D2:D = "Suggestion for Improvement", 
    QUERY(FormResponses!A2:O, "SELECT G,H WHERE D ='Suggestion for Improvement'",0),
  IF(FormResponses!D2:D = "Feature Request",
    QUERY(FormResponses!A2:O, "SELECT I WHERE D ='Feature Request'",0),
  IF(FormResponses!D2:D = "Other",
    QUERY(FormResponses!A2:O, "SELECT J WHERE D ='Other'",0), "")
))))  

它有效,直到第二个项目与已存在的类别相同。

示例:有人提交了“错误报告”,在formResponses中已经有一个项目被归类为错误报告,“主要”标签在G列的违规单元格中显示此错误: “IF的数组参数大小不同”

我需要的是公式查看Master D列中的类别,然后从“formResponses”中提取与该行匹配的报告和其他详细信息数据。我知道错误告诉我确切的错误:)但我找不到解决方法。这次我做了什么?

1 个答案:

答案 0 :(得分:0)

我最后通过使用此代码解决了我的问题:

=ARRAYFORMULA(
  IF(FormResponses!D:D = "Bug report",
    QUERY(FormResponses!A:O, "SELECT E,F",0), 
  IF(FormResponses!D:D = "Suggestion for Improvement",
    QUERY(FormResponses!A:O, "SELECT G,H",0), 
  IF(FormResponses!D:D = "Feature Request", 
    QUERY(FormResponses!A:O, "SELECT I,K",0), 
  IF(FormResponses!D:D = "Other", 
    QUERY(FormResponses!A:O, "SELECT J,K",0),"")
))))

最好的我可以告诉我,我使用A2:O的范围太具体了,并且通过使用IF(语句和WHERE语句来查找特定字符串)来加倍我的参数。

这里仍然存在一个小问题,其中任何选择单个列的查询(两个底部IF')都会将重复数据拉入两个单元格。我通过为第二个选择器拉出一个空列来解决这个问题。

如果有人有更好的方法,我很高兴听到他们:)