tiny-olap

0.2.4 • Public • Published

tiny-olap

OLAP functionality for use with data visualizations. Aggregate, filter, and grouping data along key dimensions and measures. This is a light weight olap lib. Probably one of the simplest api's currently available. Inspired by moment and numeral js libraries libraries.

Installation

npm install -s tiny-olap

Getting Started

Given the following sample for the proceeding examples:

  var data = [
     {"country": "us", "date": "2012-02-03", "gender": "m", "pageviews": 10, "signups": 2, "paid": 3}
    ,{"country": "ca", "date": "2012-02-03", "gender": "m", "pageviews": 20, "signups": 1, "paid": 5}
    ,{"country": "mx", "date": "2012-02-03", "gender": "m", "pageviews": 6, "signups": 0, "paid": 1}
    ,{"country": "mx", "date": "2012-02-03", "gender": "f", "pageviews": 2, "signups": 1, "paid": 0}
    ,{"country": "mx", "date": "2012-02-03", "gender": "m", "pageviews": 6, "signups": 0, "paid": 1}
    ,{"country": "mx", "date": "2012-02-03", "gender": "m", "pageviews": 6, "signups": 0, "paid": 1}
    ,{"country": "mx", "date": "2012-02-03", "gender": "m", "pageviews": 6, "signups": 0, "paid": 1}
  ]

Group and Aggregate

 
var TinyOlap = require('tiny-olap');
var olap = new TinyOlap(data);
 
var result = olap.query()
        .group('country')
        .measure({name: 'pageviews', formula: 'pageviews', agg: 'sum'})
        .run();
 

Group by Multiple Dimensions

 
var TinyOlap = require('tiny-olap');
var olap = new TinyOlap(data);
 
var result = olap.query()
        .group(['country', 'gender'])
        .measure({name: 'pageviews', formula: 'pageviews', agg: 'sum'})
        .run();
 

Measure

Measure objects must be supplied in order for tiny-olap to aggregate a column.

  • name (required) - output column name
  • formula (required) - function|string - Either a function that takes a row object or string pointing to the original column name
  • agg (required) - sum|avg|count|min|max - Aggregation function

Filtering Data

Filter takes an array of 2 dimensional arrays. The first element refers is the data column name and the second is the value to filter on.

 
var TinyOlap = require('tiny-olap');
var olap = new TinyOlap(data);
 
var result = olap.query()
        .group(['country', 'gender'])
        .measure({name: 'pageviews', formula: 'pageviews', agg: 'sum'})
        .filter([ ['country', 'us'], ['country', 'mx'] ] )
        .run();
 

Ordering Data

Ordering accepts an array of columns to order by and optional corresponding array of order directions.

 
var TinyOlap = require('tiny-olap');
var olap = new TinyOlap(data);
 
var result = olap.query()
        .group(['country', 'gender'])
        .measure({name: 'pageviews', formula: 'pageviews', agg: 'sum'})
        .filter([ ['country', 'us'], ['country', 'mx'] ] )
        .order(['country', 'gender'], ['asc', 'desc'])
        .run();
 

Unindexed Data

When each row is an array instead of an object tiny-olap requires a header parameter in order to work properly.

var data = [
     ["us", "2012-02-03", 10, 2, 3]
    ,["ca", "2012-02-03", 20, 1, 5]
    ,["mx", "2012-02-03", 6, 0, 1]
    ,["us", "2012-02-04", 5, 2, 3]
    ,["ca", "2012-02-04", 10, 6, 5]
    ,["mx", "2012-02-04", 10, 3, 5]
]
 
var TinyOlap = require('tiny-olap');
 
// pass in headers paramenter 
var olap = new TinyOlap(data, ["country", "date", 
        "pageviews", "signups", "paid"]);
 
// You can use tiny-olap like normal from here.
 

Package Sidebar

Install

npm i tiny-olap

Weekly Downloads

6

Version

0.2.4

License

MIT

Unpacked Size

14.4 kB

Total Files

5

Last publish

Collaborators

  • ajoabraham