Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pedrocarmona/tailor_made
business intelligence for humans
https://github.com/pedrocarmona/tailor_made
Last synced: 4 days ago
JSON representation
business intelligence for humans
- Host: GitHub
- URL: https://github.com/pedrocarmona/tailor_made
- Owner: pedrocarmona
- License: mit
- Created: 2019-03-17T22:06:59.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-03-08T20:10:41.000Z (over 1 year ago)
- Last Synced: 2024-10-31T13:40:56.269Z (15 days ago)
- Language: Ruby
- Homepage:
- Size: 78.1 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# TailorMade
Currently in development.
Business intelligence for humans. This gem allows to create dashboards, based on query objects and plot one measure of the grouped data. Makes it easy for people without sql knowledge to explore data. Uses active record.
It uses metaprogramming to allow developers to easily build dashboards. The main reasons:
- Data users usually require the data as soon as possible, building dashboards should be fast;
- Developers can control access to data, decide which columns can be used - it makes it simpler to maintain the dashboards because its easier to detect when those columns are removed.![Screenshot 2019-03-23 at 14 56 05](https://user-images.githubusercontent.com/2815199/54867179-876f9b80-4d7d-11e9-8c71-208df1aa8c0d.png)
([demo application](https://github.com/pedrocarmona/tailor_made_example))
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'tailor_made'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install tailor_made
Add pagy in app/helpers/application_helper.rb
```ruby
module ApplicationHelper
include Pagy::Frontend
```Two ways:
1. Add assets gems:
```ruby
# gem "selectize-rails" # and follow its instruction
# gem "chartkick" # and follow its instruction
# gem "flatpickr" # include also rangePlugin
```
Then you need to add statments to application.scss.Otherwise:
2. Webpacker packages
```
$ yarn add chartkick chart.js flatpickr selectize
```2. Webpacker: /app/javascript/packs/application.js
```js
// tailor_made
import jquery from 'jquery'
import Chartkick from 'chartkick'
import Chart from 'chart.js'
import 'flatpickr'
import rangePlugin from 'flatpickr/dist/plugins/rangePlugin'
import "flatpickr/dist/flatpickr.css";
import 'selectize'
import "selectize/dist/css/selectize.css";
import "selectize/dist/css/selectize.bootstrap3.css";
Chartkick.addAdapter(Chart)
window.Chartkick = Chartkick
window.rangePlugin = rangePlugin
window.jquery = jquery
window.$ = jquery
```2. Webpack: /app/assets/stylesheets/application.scss
```scss
@import "flatpickr/dist/flatpickr.css";
@import "selectize/dist/css/selectize.css";
@import "selectize/dist/css/selectize.bootstrap3.css";
```
## UsageCreate your first dashboard:
$ bin/rails g tailor_made:dashboard Ahoy::Visit
The "DSL" to create dashboards is defined in a query object. There are dimensions (columns that can be grouped and filtered) and there are measures (columns where we aply a mathematical formula - sum, count, avg, etc). You need to specify the default dimensions and measures and also the from method is an active record relation - the rails model which we are querying.
In this example you can see that there are 2 types of dimensions: `dimension` and `datetime_dimension` - the form will create specific fields for datetime, and also several filters: `started_at_day`, `started_at_day``started_at_week`, etc.
Then you can add the following statements to your query `rails_root/app/queries/tailor_made/ahoy/visit_query.rb`:
```ruby
module TailorMade
class Ahoy::VisitQuery < TailorMade::Query
# creates attr_accessors for dimensions, measures and filters
include TailorMade::Methodsdatetime_dimension :started_at, permit: [:day, :day_of_week, :day_of_month, :week, :month_of_year]
dimension(
:device_type,
domain: -> { Ahoy::Visits.all.pluck("DISTINCT device_type") }
)
dimension :referring_domain
dimension :utm_campaign
dimension :utm_content
dimension :utm_medium
dimension :utm_source
dimension :utm_term
measure :users_count, formula: "COUNT(user_id)"
measure :visits_count, formula: "COUNT(id)"def default_dimensions
[:device_type]
enddef default_measures
[:visits_count, :users_count]
enddef initialize(attributes={})
super
@started_at_starts_at ||= Date.today.beginning_of_month
@started_at_ends_at ||= Date.today
enddef from
::Ahoy::Visit.all
end
end
end
```Visit `http://localhost:3000/tailor_made/ahoy/visits`.
## Credits
This project is a remake from a project developed by [@archan937](https://github.com/archan937), I am glad I could see it running. Since I saw Paul's project, I have tried to replicate it in another tools, but the in the end, there was always something missing. I really like the idea to allow users to build dynamic queries without need of sql or excel skills.
Also, thank you [Andrew](https://github.com/ankane) for building Blazer, Groupdate and Chartkick.
## Similar Projects
- [datagrid](https://github.com/bogdan/datagrid)
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/pedrocarmona/tailor_made.
## TODO:
- [ ] select in different request (caching, etc)
- [ ] show row with totals (unique dimensions, sum without grouping)
- [ ] improve datetime fields display format (missing datetime_format types week month in methods.rb)
- [ ] ability to compare with previous period side by side
- [ ] change select js lib to choices.js to be able to sort the order of dimensions
- [ ] action view component query `_filters` (bootstrap jquery/ bootstrap stimulus/ tailwind stimulus)
- [ ] to_csv
- [ ] lots of documentation and examples