# Rubiks [![Gem Version](https://badge.fury.io/rb/rubiks.png)][gem] [![Build Status](https://secure.travis-ci.org/moneydesktop/rubiks.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/moneydesktop/rubiks.png?travis)][gemnasium] [![Code Climate](https://codeclimate.com/github/moneydesktop/rubiks.png)][codeclimate] [![Coverage Status](https://coveralls.io/repos/moneydesktop/rubiks/badge.png?branch=master)][coveralls] [gem]: https://rubygems.org/gems/rubiks [travis]: http://travis-ci.org/moneydesktop/rubiks [gemnasium]: https://gemnasium.com/moneydesktop/rubiks [codeclimate]: https://codeclimate.com/github/moneydesktop/rubiks [coveralls]: https://coveralls.io/r/moneydesktop/rubiks [jruby]: http://jruby.org [wiki_cube]: http://en.wikipedia.org/wiki/OLAP_cube [wiki_olap]: http://en.wikipedia.org/wiki/Online_analytical_processing [wiki_mdx]: http://en.wikipedia.org/wiki/MultiDimensional_eXpressions [wiki_open_source]: http://en.wikipedia.org/wiki/Open-source_software [wiki_java]: http://en.wikipedia.org/wiki/Java_(programming_language) [wiki_data_warehouse]: http://en.wikipedia.org/wiki/Data_warehouse [wiki_star_schema]: http://en.wikipedia.org/wiki/Star_schema [wiki_dimensional_modeling]: http://en.wikipedia.org/wiki/Dimensional_modeling [postgresql]: http://www.postgresql.org [mondrian]: http://mondrian.pentaho.com [mondrian_schema]: http://mondrian.pentaho.com/documentation/schema.php [rails]: http://rubyonrails.org Rubiks is a [Online Analytical Processing][wiki_olap] ( **OLAP** ) library written in [JRuby][jruby]. It runs on top of [Mondrian][mondrian] (an [Open-source][wiki_open_source] [OLAP][wiki_olap] server written in [Java][wiki_java]) and provides the ability to: * define a [OLAP][wiki_olap] schema in Ruby * generate a [Mondrian XML schema][mondrian_schema] from this definition * execute [MultiDimensional eXpressions][wiki_mdx] ( **MDX** ) queries against the OLAP server ### Assumptions * You are using [JRuby][jruby] * You are using [PostgreSQL][postgresql] * You have designed and populated your [Data Warehouse][wiki_data_warehouse] (see [Dimensional Modeling][wiki_dimensional_modeling] and [Star Schema][wiki_star_schema]) * You are using [Ruby on Rails][rails] database naming conventions ### Installation Run `gem install rubiks` to install the gem on its own. Or you can add the following to your Gemfile and run the `bundle` command to install it. gem 'rubiks' ### Schema Example After installing the gem, fire up an IRB session with `irb` or `bundle exec irb` if you are using Bundler, and follow this (or even paste it into your session): ```ruby require 'rubiks' schema = ::Rubiks::Schema.define :banking do cube :transactions do dimension :date, :type => 'TimeDimension' do hierarchy :yqmwd, :caption => 'YQMWD' do level :year, :level_type => 'TimeYears', :type => :numeric, :contiguous => true level :quarter, :level_type => 'TimeQuarters', :type => :numeric, :contiguous => true, :cardinality => :low level :month, :level_type => 'TimeMonths', :type => :numeric, :contiguous => true level :week, :level_type => 'TimeWeeks', :type => :numeric, :column => :week_of_month, :contiguous => true, :cardinality => :low level :day, :level_type => 'TimeDays', :type => :numeric, :contiguous => true end end dimension :account do hierarchy :account_type do level :asset_liability, :cardinality => :low level :account_type end end measure :count, :column => :quantity measure :amount, :aggregator => :sum, :format_string => '$#,###' end end puts schema.to_xml ``` You should see this XML: ```xml
``` ### Similar projects Check out these projects (which have been super helpful in working on Rubiks): * [Mondrian (git)](https://github.com/pentaho/mondrian) - source code for Mondrian on GitHub * [mondrian-olap](https://github.com/rsim/mondrian-olap) - a RubyGem wrapping Mondrian * [Saiku](http://analytical-labs.com) ([Saiku on GitHub](https://github.com/OSBI/saiku)) - a modular open-source analysis suite offering lightweight OLAP which remains easily embeddable, extendable and configurable. ### Contributing If you'd like to contribute to Rubiks, that's awesome, and we <3 you. There's a guide to contributing (both code and general help) over in [CONTRIBUTING.md](CONTRIBUTING.md) ### Development To see what has changed in recent versions, see the [CHANGELOG.md](CHANGELOG.md).