首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shiny小报表

有个报表的需求,可能需求太过复杂,开发那边搞出来的有点难看(一样,虽然现在好看些了。也可能是站着说话不腰疼)……想到几年没用过的shiny,考虑着要不自己写一个试试。

shiny是R语言的一个web开发包。多的就不介绍了,熟悉R语言的应该知道这个,不熟悉的一两句也说不明白,因为这里主要是介绍用shiny实现的报表(还很low)的功能。

还是没改年轻时候的毛病,太冲动了。搞了些数据,自己编一编,放在了MySQL中,然后捣鼓捣鼓,花了几天空余时间,弄了个也很难看的东西出来。

该报表实现了:分页,从MySQL中读取数据,按照时间和产品类型查询数据等功能。反正有图有真相。先上图:

第一页是实现简单的数据查询功能,展示查询到的数据,这个可以后台改SQL代码实现。炒鸡简单。

第二页是实现了如下功能:①透视表功能②同时根据产品类型或日期范围进行查询和筛选。

第三页主要实现了一些汉化的功能。这也是为了区分几个模块不同的实现方法,累赘出来的一个页面,这样会能够对比数据获取、透视等的不同方法,不过,插一句:汉化后也挺好看的。

炫耀完毕,直接上代码:

#代码开始

#ui.R:

library(shiny)

library(DT)

shinyUI(fluidPage(

headerPanel("测试报表"),

sidebarLayout(

sidebarPanel(

h4("条件选择"),

tags$hr(),#插入一条灰色的分割线

selectInput("pro_type", "产品类型:",

choices = c("'AA'", "'BB'", "'CC'","'AA','BB','CC'")),

end = "2018-05-30",separator = " 至 ",min='2018-05-01',format='yyyy-mm-dd',

language = "zh-CN",width = 200),

tags$hr(),

submitButton("查询"),

width = 3 #调整宽度

),

mainPanel(

tabsetPanel(

tabPanel("测试表1",

#h3(textOutput("table_text25"),style="color:orange"),

#DT::dataTableOutput("table_data")

dataTableOutput("table_data")

),

tabPanel("测试表2",

#h3(textOutput("test_data3"),style="color:orange"),

#DT::dataTableOutput("table_data")

dataTableOutput("table_data3")

),

tabPanel("测试表3",

dataTableOutput("table_data4")

) ) ) )))

##########

#server.R

library(shiny)

library(ROCR)

library(RMySQL)

#install.packages("gdata")

library(gdata)

library(reshape2)

#连接本地

con

#可以先写SQL,查询出结果

sql3

#这句暂时没用

#sql4

#dbSendQuery(con,'SET NAMES gbk')#存在中文字符的话需要用到这段代码

newdata

#暂时没用

#date_data

#透视表

pivot_data

shinyServer(function(input, output){

#######这段暂时没用

text_date1

input$dates[1]

})

output$date_start

format(text_date1(),"%Y-%m-%d")

})

text_date2

input$dates[2]

})

output$date_end

format(text_date2(),"%Y-%m-%d")

})

########################

output$table_data

newdata

#pivot_data

)

########################

output$table_data3

sql5 ='",input$dates[1],"' and the_date

test_data

dcast(test_data,view~the_date,fill =0)

})

##########################

test_date3

sql6 ='",input$dates[1],"' and the_date

dbGetQuery(con,sql6)

})

output$table_data4

dcast(test_date3(),product_type+view~the_date,fill =0),

options = list(pageLength = 20,language = list(

info = '显示第_START_ 至 _END_ 项结果,共 _TOTAL_ 项',

search = '搜索:',

paginate = list(previous = '上页', `next` = '下页'),

lengthMenu = '显示 _MENU_ 项结果'))

)

})

#代码结束

代码如人,想看的还是拷贝出来看吧。因为有点长,就不截图了。反正R代码也比较简单,没有太多格式的限定。

数据的话可以自己编,大概形式如下,最后是入库的。如果需要的话也可以留言给我:

总结:

①样式还比较 简单,功能还比较low,只是实现了一小步,还有很多功能没实现。冲动确实不好,让人欲罢不能,空耗光阴如许。

②如果在数据中就实现加上单引号,就不用把“产品类型”那里的产品弄得那么难看了。

③对于产品类型和时间范围可以通过在server中读取数据库中的数据来赋值,这点还没实现(就是暂时无用的sql4以后会有用的)。

④报表还比较简单,还没有进行较为复杂的运算,这个可以通过SQL实现,更可以通过R语言实现,这些后面逐渐增加。

⑤没有设置断开数据库的机制,会限制连接次数(一般是16次)这个后面也可以用dbDisconnect(con)在server代码中实现。

⑥这个只是自己用用,不好用于生产,Django应该比这个更适合部署,不过这是后话了。

可能总结的不是很全面,为了凑字数啰嗦了不少。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802G1VGU200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券