gor*_*ive 4 ruby-on-rails highcharts ruby-on-rails-3
我是RoR/Ruby的新手,我正在使用Lazy High Charts gem根据一些数据库信息生成一些purdy图表.
我已经尝试过前一个问题中提供的答案,但我仍然对如何做到这一点感到困惑.
我需要总结amount_used,billed_amount和按月/年分组(例如; 2012年8月)
最终结果类似于双轴图表,其中包含两个系列"已使用金额"和"成本".此信息特定于某个account_id.

+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| account_id | int(11) | YES | | NULL | |
| invoice_date | varchar(255) | YES | | NULL | |
| amount_used | float | YES | | NULL | |
| billed_amount | float | YES | | NULL | |
| comments | text | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
@account = Account.find(params[:id])
@invoices = Invoice.where("account_id = #{@account.id}").order("invoice_date DESC")
@h = LazyHighCharts::HighChart.new('area') do |f|
f.options[:chart][:defaultSeriesType] = "area"
#Sample dates right now, should be the grouped_by :invoice_date
f.xAxis( :categories => ['May', 'Jun', 'Jul'] )
f.yAxis([
{
:title => { :text => "Amount Used" }
},
{
:title => { :text => "Cost" },
:opposite => true
}
])
#Sample data right now, should be the summed amounts of the :amount_used correpsonding for each above grouped invoice_date
f.series(:name => "Amount Used", :data => [100,300,500] )
#Sample data right now, should be the summed amounts of the :billed_amount correpsonding for each above grouped invoice date
f.series(:name => "Cost", :yAxis => 1, :data => [200,400,600] )
end
Run Code Online (Sandbox Code Playgroud)
Ser*_*yuk 12
看起来你已经掌握了一切.以下是从db中提取数据的方法:
@aggregated_invoices = Invoice.
where(:account_id => params[:id]).
order("invoice_date DESC").
group("invoice_date").
select("DATE_FORMAT(invoice_date, '%Y-%m-01') AS invoice_date, sum(amount_used) AS amount_used, sum(billed_amount) AS billed_amount")
# Then use these instead of sample data:
@categories = @aggregated_invoices.map {|i| i.invoice_date.strftime("%b/%Y")}
@amount_used_data = @aggregated_invoices.map(&:amount_used)
@billed_amount_data = @aggregated_invoices.map(&:billed_amount)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |