SlideShare a Scribd company logo
Multidimensional
 Data Analysis
  with JRuby
   Raimonds Simanovskis
      github.com/rsim
           @rsim
Relational
data model
SQL is good for detailed
       data queries
           Get all sales transactions in
           USA, California
SELECT customers.fullname, products.product_name,
  sales.sales_date, sales.unit_sales, sales.store_sales
FROM sales
  LEFT JOIN products ON sales.product_id = products.id
  LEFT JOIN customers ON sales.customer_id = customers.id
WHERE customers.country = 'USA' AND customers.state_province = 'CA'
SQL becomes complex
       for analytical queries
           Get total sales in USA, California
           in Q1, 2011 by main product groups

SELECT product_class.product_family,
       SUM(sales.unit_sales) unit_sales_sum,
       SUM(sales.store_sales) store_sales_sum
    FROM sales
      LEFT JOIN product ON sales.product_id = product.product_id
      LEFT JOIN product_class
           ON product.product_class_id = product_class.product_class_id
      LEFT JOIN time_by_day ON sales.time_id = time_by_day.time_id
      LEFT JOIN customer ON sales.customer_id = customer.customer_id
    WHERE time_by_day.the_year = 2011 AND time_by_day.quarter = 'Q1'
      AND customer.country = 'USA' AND customer.state_province = 'CA'
    GROUP BY product_class.product_family
Maybe write distributed
map reduce function?
Multidimensional
      Data Model
Multidimensional cubes

     Dimensions
Hierarchies and levels

      Measures
OLAP technologies
  On-Line Analytical Processing
http://github.com/rsim/mondrian-olap
MDX query language
          Get total units sold and sales amount
          in USA, California in Q1, 2011
          by main product groups


SELECT {[Measures].[Unit Sales], [Measures].[Store Sales]} ON COLUMNS,
       [Product].children ON ROWS
FROM   [Sales]
WHERE ( [Time].[2011].[Q1], [Customers].[USA].[CA] )
Or in Ruby like this
       Get total units sold and sales amount
       in USA, California in Q1, 2011
       by main product groups

olap.from('Sales').
columns('[Measures].[Unit Sales]',
        '[Measures].[Store Sales]').
rows('[Product].children').
where('[Time].[2011].[Q1]', '[Customers].[USA].[CA]').
execute
Also more complex
                queries
           Get sales amount and profit %
           of top 50 products sold in USA and Canada
           during Q1, 2011

olap.from('Sales').
with_member('[Measures].[ProfitPct]').
  as('(Measures.[Store Sales] - Measures.[Store Cost]) / Measures.[Store Sales]',
  :format_string => 'Percent').
columns('[Measures].[Store Sales]', '[Measures].[ProfitPct]').
rows('[Product].children').crossjoin('[Customers].[Canada]', '[Customers].[USA]').
  top_count(50, '[Measures].[Store Sales]')
where('[Time].[2011].[Q1]').
execute
OLAP schema
            (mapping cube to tables)
schema = Mondrian::OLAP::Schema.define do
  cube 'Sales' do
    table 'sales'
    dimension 'Gender', :foreign_key => 'customer_id' do
      hierarchy :has_all => true, :primary_key => 'customer_id' do
        table 'customer'
        level 'Gender', :column => 'gender', :unique_members => true
      end
    end
    dimension 'Time', :foreign_key => 'time_id' do
      hierarchy :has_all => false, :primary_key => 'time_id' do
        table 'time_by_day'
        level 'Year', :column => 'the_year', :type => 'Numeric', :unique_members => true
        level 'Quarter', :column => 'quarter', :unique_members => false
        level 'Month',:column => 'month_of_year',:type => 'Numeric',:unique_members => false
      end
    end
    measure 'Unit Sales', :column => 'unit_sales', :aggregator => 'sum'
    measure 'Store Sales', :column => 'store_sales', :aggregator => 'sum'
  end
end
mondrian-olap gem
   eazybi.com

More Related Content

PDF
Data Warehouses and Multi-Dimensional Data Analysis
PDF
RailsWayCon: Multidimensional Data Analysis with JRuby
PDF
Multidimensional Data Analysis with Ruby (sample)
PDF
Product listing presentation
PDF
Extending Oracle E-Business Suite with Ruby on Rails
PPT
Kishore jaladi-dw
PPT
Data ware housing- Introduction to olap .
PDF
Building a semantic/metrics layer using Calcite
Data Warehouses and Multi-Dimensional Data Analysis
RailsWayCon: Multidimensional Data Analysis with JRuby
Multidimensional Data Analysis with Ruby (sample)
Product listing presentation
Extending Oracle E-Business Suite with Ruby on Rails
Kishore jaladi-dw
Data ware housing- Introduction to olap .
Building a semantic/metrics layer using Calcite

Similar to Multidimensional Data Analysis with JRuby (20)

PPT
Data Warehousing
PPT
Datawarehosuing
PDF
Data Warehousing and Data Mining
PDF
Informix physical database design for data warehousing
PPT
Introduction to OLAP and OLTP Concepts - DBMS
PDF
mondrian-olap JRuby library
PDF
Business Intelligence: OLAP, Data Warehouse, and Column Store
PPT
ch19.ppt
PPT
ch19.ppt
PDF
Adding measures to Calcite SQL
PDF
(Lecture 5)OLAP Querying.pdf
PDF
Einführung in mdx
PPT
Oracle SQL Model Clause
PDF
2 olap operaciones
PDF
Business Intelligence: Multidimensional Analysis
PPT
Introduction To Msbi By Yasir
PPT
Data warehousing
PPT
OLAP Cubes in Datawarehousing
PPT
1242626441API2 upload
Data Warehousing
Datawarehosuing
Data Warehousing and Data Mining
Informix physical database design for data warehousing
Introduction to OLAP and OLTP Concepts - DBMS
mondrian-olap JRuby library
Business Intelligence: OLAP, Data Warehouse, and Column Store
ch19.ppt
ch19.ppt
Adding measures to Calcite SQL
(Lecture 5)OLAP Querying.pdf
Einführung in mdx
Oracle SQL Model Clause
2 olap operaciones
Business Intelligence: Multidimensional Analysis
Introduction To Msbi By Yasir
Data warehousing
OLAP Cubes in Datawarehousing
1242626441API2 upload
Ad

More from Raimonds Simanovskis (20)

PDF
Profiling Mondrian MDX Requests in a Production Environment
PDF
Improve Mondrian MDX usability with user defined functions
PDF
Analyze and Visualize Git Log for Fun and Profit - DevTernity 2015
PDF
eazyBI Overview - Embedding Mondrian in other applications
PDF
Atvērto datu izmantošanas pieredze Latvijā
PDF
JavaScript Unit Testing with Jasmine
PDF
JRuby - Programmer's Best Friend on JVM
PDF
Agile Operations or How to sleep better at night
PDF
TDD - Why and How?
PDF
Analyze and Visualize Git Log for Fun and Profit
PDF
PL/SQL Unit Testing Can Be Fun
PDF
opendata.lv Case Study - Promote Open Data with Analytics and Visualizations
PDF
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
PDF
Why Every Tester Should Learn Ruby
PDF
Rails on Oracle 2011
PDF
Rails-like JavaScript using CoffeeScript, Backbone.js and Jasmine
PDF
How to Adopt Agile at Your Organization
PDF
PL/SQL Unit Testing Can Be Fun!
PDF
Fast Web Applications Development with Ruby on Rails on Oracle
PDF
How I Learned To Stop Worrying And Love Test Driven Development
Profiling Mondrian MDX Requests in a Production Environment
Improve Mondrian MDX usability with user defined functions
Analyze and Visualize Git Log for Fun and Profit - DevTernity 2015
eazyBI Overview - Embedding Mondrian in other applications
Atvērto datu izmantošanas pieredze Latvijā
JavaScript Unit Testing with Jasmine
JRuby - Programmer's Best Friend on JVM
Agile Operations or How to sleep better at night
TDD - Why and How?
Analyze and Visualize Git Log for Fun and Profit
PL/SQL Unit Testing Can Be Fun
opendata.lv Case Study - Promote Open Data with Analytics and Visualizations
Rails-like JavaScript Using CoffeeScript, Backbone.js and Jasmine
Why Every Tester Should Learn Ruby
Rails on Oracle 2011
Rails-like JavaScript using CoffeeScript, Backbone.js and Jasmine
How to Adopt Agile at Your Organization
PL/SQL Unit Testing Can Be Fun!
Fast Web Applications Development with Ruby on Rails on Oracle
How I Learned To Stop Worrying And Love Test Driven Development
Ad

Recently uploaded (20)

PPTX
MYSQL Presentation for SQL database connectivity
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Encapsulation theory and applications.pdf
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Tartificialntelligence_presentation.pptx
PPTX
Big Data Technologies - Introduction.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
1. Introduction to Computer Programming.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Weekly Chronicles - August'25-Week II
MYSQL Presentation for SQL database connectivity
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Encapsulation theory and applications.pdf
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Getting Started with Data Integration: FME Form 101
Tartificialntelligence_presentation.pptx
Big Data Technologies - Introduction.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Advanced methodologies resolving dimensionality complications for autism neur...
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Machine learning based COVID-19 study performance prediction
Digital-Transformation-Roadmap-for-Companies.pptx
1. Introduction to Computer Programming.pptx
Programs and apps: productivity, graphics, security and other tools
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Weekly Chronicles - August'25-Week II

Multidimensional Data Analysis with JRuby

  • 1. Multidimensional Data Analysis with JRuby Raimonds Simanovskis github.com/rsim @rsim
  • 3. SQL is good for detailed data queries Get all sales transactions in USA, California SELECT customers.fullname, products.product_name, sales.sales_date, sales.unit_sales, sales.store_sales FROM sales LEFT JOIN products ON sales.product_id = products.id LEFT JOIN customers ON sales.customer_id = customers.id WHERE customers.country = 'USA' AND customers.state_province = 'CA'
  • 4. SQL becomes complex for analytical queries Get total sales in USA, California in Q1, 2011 by main product groups SELECT product_class.product_family, SUM(sales.unit_sales) unit_sales_sum, SUM(sales.store_sales) store_sales_sum FROM sales LEFT JOIN product ON sales.product_id = product.product_id LEFT JOIN product_class ON product.product_class_id = product_class.product_class_id LEFT JOIN time_by_day ON sales.time_id = time_by_day.time_id LEFT JOIN customer ON sales.customer_id = customer.customer_id WHERE time_by_day.the_year = 2011 AND time_by_day.quarter = 'Q1' AND customer.country = 'USA' AND customer.state_province = 'CA' GROUP BY product_class.product_family
  • 5. Maybe write distributed map reduce function?
  • 6. Multidimensional Data Model Multidimensional cubes Dimensions Hierarchies and levels Measures
  • 7. OLAP technologies On-Line Analytical Processing
  • 9. MDX query language Get total units sold and sales amount in USA, California in Q1, 2011 by main product groups SELECT {[Measures].[Unit Sales], [Measures].[Store Sales]} ON COLUMNS, [Product].children ON ROWS FROM [Sales] WHERE ( [Time].[2011].[Q1], [Customers].[USA].[CA] )
  • 10. Or in Ruby like this Get total units sold and sales amount in USA, California in Q1, 2011 by main product groups olap.from('Sales'). columns('[Measures].[Unit Sales]', '[Measures].[Store Sales]'). rows('[Product].children'). where('[Time].[2011].[Q1]', '[Customers].[USA].[CA]'). execute
  • 11. Also more complex queries Get sales amount and profit % of top 50 products sold in USA and Canada during Q1, 2011 olap.from('Sales'). with_member('[Measures].[ProfitPct]'). as('(Measures.[Store Sales] - Measures.[Store Cost]) / Measures.[Store Sales]', :format_string => 'Percent'). columns('[Measures].[Store Sales]', '[Measures].[ProfitPct]'). rows('[Product].children').crossjoin('[Customers].[Canada]', '[Customers].[USA]'). top_count(50, '[Measures].[Store Sales]') where('[Time].[2011].[Q1]'). execute
  • 12. OLAP schema (mapping cube to tables) schema = Mondrian::OLAP::Schema.define do cube 'Sales' do table 'sales' dimension 'Gender', :foreign_key => 'customer_id' do hierarchy :has_all => true, :primary_key => 'customer_id' do table 'customer' level 'Gender', :column => 'gender', :unique_members => true end end dimension 'Time', :foreign_key => 'time_id' do hierarchy :has_all => false, :primary_key => 'time_id' do table 'time_by_day' level 'Year', :column => 'the_year', :type => 'Numeric', :unique_members => true level 'Quarter', :column => 'quarter', :unique_members => false level 'Month',:column => 'month_of_year',:type => 'Numeric',:unique_members => false end end measure 'Unit Sales', :column => 'unit_sales', :aggregator => 'sum' measure 'Store Sales', :column => 'store_sales', :aggregator => 'sum' end end
  • 13. mondrian-olap gem eazybi.com