新手问题 下面的报表是不是可以通过 gem 来实现?

Vdan · 2017年04月17日 · 最后由 liprais 回复于 2017年04月21日 · 3014 次阅读

我又活着回来了,我是小白需要向大神们请教一些问题。🙏 🙏 现在有个项目,需要用 ruby 把数据库中的资料提取出来,并用报表的形式表现出来。我该如何去操作呢?想了半天还是没一点思绪。下面的功能是用 java 写出来的,现在想转换成 ruby,这个想法可行么?难点在哪个地方,或是我需要再去学习哪些必要的知识?在此谢过了。 呈现的方式可以变,但是内容是不能变的。

我现在面临的状况是,数据库是现成的,现在是需要个思路,来解决提取资料的过程。用 java 写的项目已经上线,但是还是想用 ruby 来替换。

分两步,第一步是 data aggregation,第二部是 data visualization。

第一步,你可以考虑用常规方案(比如临时表,视图,Elasticsearch 或者后台任务聚合数据到 Redis)保存聚合数据。
第二步,你可以考虑使用 D3 或者其他流行的可视化组件来画图表。

可以用data aggregationdata visualization 作为关键字在网上搜到无数教材。

lgn21st 回复

多谢了,我现在去查查资料。过程中有不懂的地方,还需要占用你的宝贵时间指点一下。谢谢了。

Vdan 回复

我建议你直接看 Java 部分的代码,至少前端部分是通用的,数据处理部分只要你看懂了,用 Ruby 写起来只会更快更简单,所以你没有必要先跑到外面去找答案,先看现有的实现吧。

lgn21st 回复

嗯,好的,谢谢。你的建议很棒!!!😀 又学习了一招。

superset 看看

看看 echarts?

这个「没有头绪」是大问题。

msg7086 回复

额,,,,可能是我没描述清楚。业务逻辑是,铁路上有个考试,需要各个站点的人员都要参加,最后考试的结果是通过网站生成好多报表,呈现给领导看。

lgn21st 回复

大神,我又想了想,抽空帮我看下,我的思路对不对? 这个数据产生的逻辑,我理解为。由于 ruby 里我目前学到的最重要的,就是 MVC 嘛。只要在 controller 和 model 里定义好方法,然后衔接数据库,抓取数据,最后抛给 views 来呈现报表。就像爬虫脚本,抓取关键字一样?只要我用把数据抓出来,剩下的就是 views 的事了吧。。。好像是有报表的 gem。会不会有类似于 font-awesome 这样的,直接就能用? 😃 😃 😃 😃 😃 😃

Vdan 回复

并不完整,你的思路被局限在 ...... 你所认知的 Rails 框架本身。

你所说的是数据的呈现思路,而不是数据聚合思路,可能有报表 gem 辅助你解决数据的呈现问题,但是数据的聚合包括统计运算,需要你在 Rails 框架之外独立处理。

Vdan 回复

不太确定这个页面你能否独自搞下来,不过这不要紧。

就事论事,思路很简单:

  1. 从数据库中读取原始数据
  2. 计算需要呈现的数据结果
  3. 构建页面,呈现内容

对应到 Rails 框架里,第一步抽取数据,你也提到了;第二步计算数据,这个肯定是需要写代码算的,从实现的角度讲,你写在 Controller 里还是 Model 里都可以,个人建议你写 Model 里然后在 Controller 中调方法;第三步构建页面,这个不必多说,不过需要在 Controller 中把必要的信息组织好,才能做出数据结果。

#12 楼提到你对 Rails 框架认知不够,确实如此。https://ruby-china.org/wiki/books 这里有些书你先看看呗。

可能会有一些坑。因为这个是 java 项目,数据表设计可能会与 rails 冲突,比如联合主键,命名不规范,占用保留字段名等等。不确定你要用多久能搞定。

当你确定能顺利读出数据,那就好办了。先把读出来的数据组织成前端需要的形式,在确定能显示之后再考虑聚合的数据要放哪里。

只谈标题哈,思维方式变一下,为什么要用 gem(或者 jar 包或者什么语言什么库)?

是我想做 XXX,经过分析我发现要解决 A、B、C、D 四个子问题,经过 Google、被人安利、各种方式求助,发现 α gem 可以解决 A,B 可以通过 β gem 解决 B,C 要扩展下 γ gem,D 研究了一下得自己写了... 然后我把这些代码串在一起组织好,写好测试,交差,刷论坛去...

我在公司里负责的主要工作就是处理数据,这种问题我有经验。

数据可视化一般用 Echart 就够了。

数据聚合,推荐使用 Daru 这个 Gem,它类似于 python 里的 pandas,提供了 Daru::Vector 和 Daru::DataFrame 两个经典的类用来处理数据。缺点是经常出 BUG,遇到了只能自己看源码然后使用"打开类"的技术来修复(或者在 Github 上反馈)。

推荐去看《利用 Python 进行数据分析》第九章,虽然写的是 Python 的 pandas 包的操作,但数据处理的思想是通用的,就是把所有相关数据都汇总到一个 DataFrame 里,每行是一个观测(在这个项目里就是人的所有数据),每列是一个变量(比如成绩,是否参加了考试等等),然后进行聚合操作。这些成绩统计项目都属于数据聚合的范畴。

a0nqm 回复

妥妥的,我先看,不懂的再问咯。。。

jasl 回复

恩,作为一只菜鸟来说,只能是不断的试错,然后放上来被怼。谢谢你提供的思路。😁

monkeygq 回复

谢谢,正在看。

longfei 回复

谢谢,十分感谢,我要是不懂的,还望指点。。。。

Vdan 回复

怼你干啥。。。抖个机灵而已。。。

longfei 回复

数据聚合为啥不用数据库........

需要 登录 后方可回复, 如果你还没有账号请 注册新账号