使用R';s shinydashboard,如何基于SQL查询执行反应式计算';结果如何?
目前,我正在使用shinydashboard、R和MS Access构建KPI仪表板。为了满足用户能够深入到原子数据的需求,我使用MS Access数据库(简称SQL)作为底层数据体系结构。我使用RODBC作为DB驱动程序连接库 被动输入包括{仓库,日期1,日期2}。在ui.R页面上,日期输入采用日期范围格式 为了反应式地计算有问题的KPI,我需要根据用户输入以交互方式查询数据库中的指标,然后进行计算。我可以在手动操作时让交互式生成的查询正常工作,但不能在shinydashboard中。我还能够使用R&shiny中的renderDataTable生成查询的输出数据表,表明查询正在工作。然而,我不明白为什么我不能用下面简单的“求和”语句来做一个简单的原理证明 服务器.R使用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中。我还能够
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基础设施和管理都很糟糕。通常不会给我一个服务器与我需要的规格。