Overview

A measure is what is being counted (or aggregated in another way). For example, if you want to count Posts created over time, then the measure would be post:

measure: post
dimensions:
- created_at

You can use any model as the measure. If you want to use multiple models in one report, see Series.


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

YAML

config/reports_kit/reports/measures_overview.yml

measure: post
dimensions:
- created_at

View

app/views/my_controller/my_view.html.haml

= render_report 'measures_overview'

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