2015-12-29 3 views
1

Я пытаюсь использовать запрос BigQuery для заполнения участков в Shiny. Запрос включает входные значения из ui с помощью selectInput. Если пользователь выбирает значение, существующее в БД, например год 2014, запрос работает правильно, однако я бы хотел, чтобы пользователь также мог выбрать «Все». «Все» должно быть выбором всех значений, однако я не уверен, как выразить это в запросе с помощью selectInput.Блестящий: BigQuery Не удается, когда пользователь выбирает значение «Все»

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) 
}) 

ui.r

( 
    selectInput("year1", 
       "Year:", 
       c("All",2014,2015 
       )) 
), 

(
    selectInput("partner_name", 
       "Partner:", 
       c("All", 
       unique(as.character(data5$partner_name)))) 

ответ

2

Вы должны немного изменить запрос, который вы строите
Таким образом, в настоящее время у вас есть

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 

Я не блестит пользователь вообще - так простите мой синтаксис - ниже только мое предположения в отношении части реализации выше предложения

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="") 
+0

Я не понимаю. Как файл сервера отправит правильный запрос в запрос, если я удалил входной параметр и что такое «selected_partner_name»? Кроме того, мне нужно отправить строку в запрос за год, когда год является целым числом. Это приведет к сбою запроса. – ericbrownaustin

+0

вам все равно нужно использовать параметры. Я просто исправил запрос, который вам нужно построить/построить, используя сияющий синтаксис и параметры. –

+0

добавил возможный блестящий оператор для запроса = ... –

0

Решение Михаэля отлично работало для символьных переменных, но численные показатели работали неправильно. Я решил использовать диапазон дат символа вместо того, чтобы изначально использовалось числовое число. Благодарю.

Смежные вопросы