Table

Any chart can be converted into a table by simply adding format: table to the YAML (see below). Tables are sortable via clickable column headings, and they support just about all of the same functionality that charts do.


To create the chart above, simply add the following YAML file and call render_report in any view:

YAML

config/reports_kit/reports/table.yml

measure: post
filters:
- key: author
- key: created_at
  criteria:
    operator: between
    value: "-3M - now"
dimensions:
- key: tags
  label: Tag
- key: author
  limit: 5
order: dimension1.label
format: table

View

app/views/my_controller/my_view.html.haml

= render_report 'table' do |report|
  = report.form do |f|
    .pull-right
      = f.date_range :created_at
    = f.multi_autocomplete :author, placeholder: 'Author...'

Model

app/models/post.rb

class Post < ApplicationRecord
  belongs_to :author
  has_many :post_views, dependent: :destroy
  has_many :posts_tags, dependent: :destroy
  has_many :tags, through: :posts_tags

  include ReportsKit::Model
  reports_kit do
    aggregation :average_time_to_publish, [:average, 'posts.published_at - posts.created_at']
    contextual_filter :for_author, ->(relation, context_params) { relation.where(author_id: context_params[:author_id]) }
    dimension :approximate_views_count, group: 'ROUND(posts.views_count, -1)'
    filter :is_published, :boolean, conditions: ->(relation) { relation.where(status: 'published') }
  end

  STATUSES = %w(draft private published).freeze

  def to_s
    title
  end
end

Model's Columns

id              integer
author_id       integer
title           string
status          string
published_at    datetime
is_featured     boolean
views_count     integer
created_at      datetime
updated_at      datetime