闪亮:当用户选择“BigQuery”时,BigQuery失败;“全部”;价值

闪亮:当用户选择“BigQuery”时,BigQuery失败;“全部”;价值,r,shiny,google-bigquery,R,Shiny,Google Bigquery,我正在尝试使用BigQuery查询来填充Shiny中的绘图。查询包括使用selectInput从ui中输入的值。如果用户选择数据库中存在的一个值,例如year is 2014,则查询工作正常,但是,我希望用户也能够选择“All”。“All”应该是所有值的选择,但是,我不确定如何使用selectInput在查询中表示 server.r data1 <- eventReactive(input$do_sql, { bqr_auth(token = NULL, new_user = FALSE,

我正在尝试使用BigQuery查询来填充Shiny中的绘图。查询包括使用selectInput从ui中输入的值。如果用户选择数据库中存在的一个值,例如year is 2014,则查询工作正常,但是,我希望用户也能够选择“All”。“All”应该是所有值的选择,但是,我不确定如何使用selectInput在查询中表示

server.r

data1 <- eventReactive(input$do_sql, {
bqr_auth(token = NULL, new_user = FALSE, verbose = FALSE)

query = paste('select month, event, partner_name, sum(f0_) from [dataset.table] where year =',input$year1,' and partner_name = \"',input$partner_name,'\"
              GROUP by 1,2,3
              ORDER by 1 asc
              LIMIT 10000', sep="")

bqr_query(projectId, datasetId, query, maxResults =2000)
})

您应该稍微更改正在构造的查询
那么现在你有

SELECT month, event, partner_name, SUM(f0_) 
FROM [dataset.table] 
WHERE year = selected_year
AND partner_name = "selected_partner_name"
GROUP BY 1,2,3
ORDER BY 1 ASC
LIMIT 10000
分别与:

selected_year --> input$year1
selected_partner_name --> input$partner_name
相反,您应该在下面构造查询

SELECT month, event, partner_name, SUM(f0_) 
FROM [dataset.table] 
WHERE (year = selected_year OR "selected_year" = "All") 
AND (partner_name = "selected_partner_name" OR "selected_partner_name" = "All")
GROUP BY 1,2,3
ORDER BY 1 ASC
LIMIT 10000
我根本不是一个闪亮的用户——所以请原谅我的语法——下面就是我的 关于实施上述建议的猜测


米哈伊尔的解决方案对字符变量非常有效,但数字运算并不正确。我决定使用字符日期范围,而不是我最初使用的年份数字。谢谢。

我不明白。如果我删除了输入参数以及什么是“selected\u partner\u name”,服务器文件将如何向查询发送正确的输入?另外,当year是整数时,我必须向year的查询发送一个字符串。这将导致查询失败。您仍然需要使用参数。我刚刚修复了需要使用闪亮的语法和参数来构建/构造的查询,因此,
在阅读了某人对您的问题的答案后,您应该做的第一件事就是对答案进行投票,就像任何其他用户(拥有足够声誉)所做的一样。投票选出对你有帮助的答案
,并接受你认为对你最有帮助的答案。还有更多。。。当有人回答你的问题时,你可以检查一下该做什么,然后
SELECT month, event, partner_name, SUM(f0_) 
FROM [dataset.table] 
WHERE (year = selected_year OR "selected_year" = "All") 
AND (partner_name = "selected_partner_name" OR "selected_partner_name" = "All")
GROUP BY 1,2,3
ORDER BY 1 ASC
LIMIT 10000
query = paste('SELECT month, event, partner_name, sum(f0_) 
    FROM [dataset.table] 
    WHERE (year =',input$year1,' OR "All" ="',input$year1,'") 
    AND (partner_name = \"',input$partner_name,'\" OR "All" = \"',input$partner_name,'\")
          GROUP by 1,2,3
          ORDER by 1 asc
          LIMIT 10000', sep="")