2017-12-18 1 views
0
// 
library(plyr) 
library(shiny) 
library(ggplot2) 
library(scales) 
library(shinydashboard) 
library(gridExtra) 
library(DT) 
library(ggthemes) 
library(plotly) 
library(data.table) 
library(plotrix) 
library(shinyjs) 
library(shinycssloaders) 

# connection with dash db 
shinyServer(function(input, output, session) { 

    # withProgress(message = 'Data Downloading', 
    #    detail = 'This may take a while...', value = 0, { 
    #    for (i in 1:15) { 
    #     incProgress(1/15) 
    #     Sys.sleep(10) 
    #    }}) 

    dsn_driver = "" 
    dsn_database = ""   # e.g. "BLUDB" 
    dsn_hostname = "" # e.g.: "awh-yp-small03.services.dal.bluemix.net" 
    dsn_port = "50000"    # e.g. "50000" 
    dsn_protocol = "TCPIP"   # i.e. "TCPIP" 
    dsn_uid = ""  # e.g. "dash104434" 
    dsn_pwd = "" 
    jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "db2jcc4.jar"); 
    jdbc_path = paste("jdbc:db2://", dsn_hostname, ":", dsn_port, "/", dsn_database, sep=""); 
    conn = dbConnect(jcc, jdbc_path, user=dsn_uid, password=dsn_pwd) 

내가이 쿼리를 만들고 싶어이 5 분마다 업데이트되는 5 분마다에 새로 고침쿼리 및 데이터 프레임이 반응하고

query="select RETAIL_STORE.STR_NM as STR_NM,year(RETAIL_STR_SALES_DETAIL.SALE_DATE) as YEAR,month(retail_str_sales_detail.sale_date) as Monthnumber, 
    monthname(RETAIL_STR_SALES_DETAIL.SALE_DATE) AS MONTHNAME,WEEK(RETAIL_STR_SALES_DETAIL.SALE_DATE) AS WEEKNAME 
    ,RETAIL_STR_SALES_DETAIL.prod_id 
    ,RETAIL_STR_SALES_DETAIL.PROD_NM as PROD_NM 
    ,retail_store_area_wise.area_name AS Area_Name 
    ,SUM(RETAIL_STR_SALES_DETAIL.qty) AS QTY 
    ,round(sum(RETAIL_STR_SALES_DETAIL.total),2) as TOTAL 
    ,RETAIL_STORE_PRODUCT_HEMAS.MFG as MFG 
    from RETAIL_STORE_PRODUCT_HEMAS 
    INNER JOIN RETAIL_STR_SALES_DETAIL ON RETAIL_STORE_PRODUCT_HEMAS.prod_id = RETAIL_STR_SALES_DETAIL.prod_id 
    INNER JOIN retail_dstr_prod ON retail_dstr_prod.prod_id = RETAIL_STR_SALES_DETAIL.prod_id 
    INNER JOIN retail_store ON retail_store.store_id = RETAIL_STR_SALES_DETAIL.store_id 
    INNER JOIN retail_store_area_wise ON retail_store_area_wise.store_id = RETAIL_STR_SALES_DETAIL.store_id 
    where retail_dstr_prod.dstr_id='1495220190' 
    group by RETAIL_STORE.STR_NM,RETAIL_STR_SALES_DETAIL.SALE_DATE 
    ,year(RETAIL_STR_SALES_DETAIL.SALE_DATE) 
    , monthname(RETAIL_STR_SALES_DETAIL.SALE_DATE) 
    , RETAIL_STR_SALES_DETAIL.prod_id 
    , RETAIL_STR_SALES_DETAIL.PROD_NM 
    , retail_store_area_wise.area_name 
    , RETAIL_STORE_PRODUCT_HEMAS.MFG 
    , RETAIL_STR_SALES_DETAIL.store_id 
    , retail_store.store_id, WEEK(RETAIL_STR_SALES_DETAIL.SALE_DATE) 
    ORDER BY year(RETAIL_STR_SALES_DETAIL.SALE_DATE),month(retail_str_sales_detail.sale_date),WEEK(RETAIL_STR_SALES_DETAIL.SALE_DATE)"; 
    rs=dbSendQuery(conn,query) 
    query1 <- fetch(rs, -1) 

또한 쿼리

과 데이터 프레임을 새로 고침
biz=data.frame(

    year=query1$YEAR, 
    ProdNm=query1$PROD_NM, 
    Total = as.numeric(as.character(query1$TOTAL)), 
    Sold_that_day = query1$QTY, 
    Month = query1$MONTHNAME, 
    Weekand= query1$WEEKNAME, 
    AreaName=query1$AREA_NAME, 
    Manufacturer=query1$MFG, 
    stringsAsFactors = FALSE 
) 


    # Total sales By year In 2017 # 


    totalsales="select year(RETAIL_STR_SALES_DETAIL.SALE_DATE) as YEAR, 
     monthname(RETAIL_STR_SALES_DETAIL.SALE_DATE) AS MONTHNAME 
     ,round(sum(RETAIL_STR_SALES_DETAIL.total),2) as TOTAL 

     from retail_str_sales_detail where year(RETAIL_STR_SALES_DETAIL.SALE_DATE)='2017' 
     group by year(RETAIL_STR_SALES_DETAIL.SALE_DATE), 
     monthname(RETAIL_STR_SALES_DETAIL.SALE_DATE)"; 


     totalsalesbyyear <- fetch(dbSendQuery(conn,totalsales), -1) 



      bizmonthly=data.frame(

       MonthName=factor(totalsalesbyyear$MONTHNAME,levels = month.name), 
       Year=totalsalesbyyear$YEAR, 
       MonthTotal=as.numeric(as.character(totalsalesbyyear$TOTAL)) 
      ) 

       print(bizmonthly) 
+0

읽어 보시기 바랍니다 통해 biz의 데이터에 액세스해야합니다 나는 좋은 질문을 할까?] (https://stackoverflow.com/help/how-to-ask) – waka

답변

0

트릭을해야합니다. 5 분마다 한 번 업데이트되므로 모든 세션에서 실행되지 않습니다. 시간 확인은 reactiveTimer에 따라 매 10 초입니다. 어떻게 [도 [A, 최소 완료하고 검증 가능한 예제를 만드는 방법] (https://stackoverflow.com/help/mcve)과 : 당신이 biz()

library(shiny) 

autoInvalidate <- reactiveTimer(10000,session = NULL) 
Getupdates <- function(qfrequency){ 
    rs <- dbSendQuery(conn,query) 
    if(!exists("nextCall")){ 
    message("Initiating") 
    query1 <<- fetch(rs, -1) 
    nextCall <<- Sys.time() + qfrequency 
    message("Got Initial Data") 
    } 
    else if (Sys.time() >= nextCall){ 
    message(paste0(Sys.time(), " Querying Periodically")) 
    query1 <<- fetch(rs, -1) 
    nextCall <<- Sys.time() + qfrequency 
    } 
    else{ 
    return() 
    } 
} 

ui <- fluidPage(tableOutput("table")) 

server <- function(input, output, session) { 
    observe({ 
    autoInvalidate() 
    # 300 is 5 mins 
    Getupdates(300) 
    }) 

    biz <- reactive({ 
    bizdata <- data.frame(
     year=query1$YEAR, 
     ProdNm=query1$PROD_NM, 
     Total = as.numeric(as.character(query1$TOTAL)), 
     Sold_that_day = query1$QTY, 
     Month = query1$MONTHNAME, 
     Weekand= query1$WEEKNAME, 
     AreaName=query1$AREA_NAME, 
     Manufacturer=query1$MFG, 
     stringsAsFactors = F 
    ) 
    bizdata 
    }) 

    output$table <- renderTable({biz()}) 
} 

shinyApp(ui, server) 
+0

답변을 주셔서 감사합니다. 그러나 내 쿼리를 동적으로 만들려고합니다. –

+0

나는 당신이'query1'을 가지고 있도록 대답을 편집했습니다. 변하기 쉬운. '<< -'연산자를 사용하여 다른 쿼리를 추가 할 수 있습니다. –

관련 문제