Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R';s shinydashboard,如何基于SQL查询执行反应式计算';结果如何?_Sql_R_Dashboard_Shinydashboard_Kpi - Fatal编程技术网

使用R';s shinydashboard,如何基于SQL查询执行反应式计算';结果如何?

使用R';s shinydashboard,如何基于SQL查询执行反应式计算';结果如何?,sql,r,dashboard,shinydashboard,kpi,Sql,R,Dashboard,Shinydashboard,Kpi,目前,我正在使用shinydashboard、R和MS Access构建KPI仪表板。为了满足用户能够深入到原子数据的需求,我使用MS Access数据库(简称SQL)作为底层数据体系结构。我使用RODBC作为DB驱动程序连接库 被动输入包括{仓库,日期1,日期2}。在ui.R页面上,日期输入采用日期范围格式 为了反应式地计算有问题的KPI,我需要根据用户输入以交互方式查询数据库中的指标,然后进行计算。我可以在手动操作时让交互式生成的查询正常工作,但不能在shinydashboard中。我还能够

目前,我正在使用shinydashboard、R和MS Access构建KPI仪表板。为了满足用户能够深入到原子数据的需求,我使用MS Access数据库(简称SQL)作为底层数据体系结构。我使用RODBC作为DB驱动程序连接库

被动输入包括{仓库,日期1,日期2}。在ui.R页面上,日期输入采用日期范围格式

为了反应式地计算有问题的KPI,我需要根据用户输入以交互方式查询数据库中的指标,然后进行计算。我可以在手动操作时让交互式生成的查询正常工作,但不能在shinydashboard中。我还能够使用R&shiny中的renderDataTable生成查询的输出数据表,表明查询正在工作。然而,我不明白为什么我不能用下面简单的“求和”语句来做一个简单的原理证明

服务器.R

query_brk = reactive({
      q = ifelse(input$house == 'Saint Louis', 
                 paste0("SELECT * 
                        FROM T_Breakage 
                        WHERE Warehouse = 'STL' AND Date BETWEEN #",
                        as.character(format(input$dates[1], "%m/%d/%Y")), 
                        "# AND #", 
                        as.character(format(input$dates[2], "%m/%d/%Y")), "#"),
                 paste0("SELECT * 
                        FROM T_Breakage 
                        WHERE Warehouse = 'KC' AND Date BETWEEN #",
                        format(input$dates[1], "%m/%d/%Y"), 
                        "# AND #", 
                        format(input$dates[2], "%m/%d/%Y"), "#"))
      q
    })

t_breakage = reactive({
  odbc_connection = odbcConnectAccess2007(reporting_db)
  t = sqlQuery(odbc_connection, "SELECT * FROM T_Breakage WHERE Warehouse = 'STL' AND Date BETWEEN #06/01/2015# AND #03/31/2016#")# query=query_brk())
  t
}) 

output$total_breakage = reactive({
  valueBox(
    scales::comma((round(sum(t_breakage()[, 'Cases'], na.rm=TRUE)))), 
    'Warehouse Breakage', icon=icon('trash-o')
  )
})
我已进行检查,以确保(1)查询以正确的访问格式正确呈现,(2)查询按照指定的方式工作。我可以合理地确定,细分出现在代码中的“输出$total_破碎”阶段


我可能遗漏了一些简单的东西——非常感谢您对解决此问题的任何帮助。谢谢你的时间和思考。

你能把它改成
sum(t_breaking()$Cases)
看看它能做什么吗?我发现您的访问方式存在一些问题,但这可能不是您的问题。不知道您将要操作哪些卷,但不要期望它是真正的反应性卷,因为它需要访问磁盘才能检索数据。如果您希望获得良好的反应性,您应该将数据保存在R会话内存中。还要注意,ODBC被认为是慢接口,但使用ms access,您可能没有其他选择。jangorecki,为延迟响应道歉。你说得对,我在走的时候注意到了这个现实。你说得对,我没有太多的选择,我们的IT基础设施和管理都很糟糕。通常情况下,我不会给我一台配置了所需规格的服务器。您能将其更改为
sum(t_breaking()$Cases)
并查看它的功能吗?我发现您的访问方式存在一些问题,但这可能不是您的问题。不知道您将要操作哪些卷,但不要期望它是真正的反应性卷,因为它需要访问磁盘才能检索数据。如果您希望获得良好的反应性,您应该将数据保存在R会话内存中。还要注意,ODBC被认为是慢接口,但使用ms access,您可能没有其他选择。jangorecki,为延迟响应道歉。你说得对,我在走的时候注意到了这个现实。你说得对,我没有太多的选择,我们的IT基础设施和管理都很糟糕。通常不会给我一个服务器与我需要的规格。