Boolean
A boolean filter lets you filter the report by either a boolean column or by some SQL expression that evaluates to a boolean.
Boolean Column
If the model has a boolean is_featured
column, you can use the following to only count records which have a true value for that column:
measure:
key: post
name: Featured Posts
filters:
- key: is_featured
criteria:
value: true
dimensions:
- author
Custom Filter
To use a custom ActiveRecord condition or custom SQL expression instead of a column, define it in the model:
class Post < ApplicationRecord
include ReportsKit::Model
reports_kit do
filter :is_published, :boolean, conditions: ->(relation) { relation.where(status: 'published') }
end
end
And then use it in the YAML:
measure:
key: post
name: Published Posts
filters:
- key: is_published
criteria:
value: true
dimensions:
- author
To create the chart above, simply add the following YAML file and call render_report
in any view:
YAML
config/reports_kit/reports/filter_boolean.yml
measure: key: post name: Featured Posts filters: - key: is_featured criteria: value: true dimensions: - author
View
app/views/my_controller/my_view.html.haml
= render_report 'filter_boolean'
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