Module: OlapReport::Cube::QueryMethods
- Defined in:
- lib/olap_report/cube/query_methods.rb
Instance Method Summary collapse
-
#drilldown(options) ⇒ Object
Fetches details for specified levels/dimensions.
- #rollup(options) ⇒ Object
-
#slice(options) ⇒ Object
Fetches result(slice) for specified options (dimensions & measures).
Instance Method Details
#drilldown(options) ⇒ Object
Fetches details for specified levels/dimensions
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/olap_report/cube/query_methods.rb', line 25 def drilldown() dimensions, measures = .values_at(:dimensions, :measures).map{|v| Array(v)} joins, dims = {}, {} dimensions.each do |k,v| dim = dimension(k) case v when Hash raise ArgumentError, "Level for '#{k}' dimension is invalid" if v.size != 1 lvl, details_lvl = *v.first dims[k] = details_lvl joins.merge! dim[lvl].joins when Symbol dims[k] = dim.prev_level(v).name joins.merge! dim[v].joins end end Fact.joins(joins).slice(dimensions: dims, measures: measures, skip_aggregated: true) end |
#rollup(options) ⇒ Object
47 48 49 |
# File 'lib/olap_report/cube/query_methods.rb', line 47 def rollup() raise "Not implemented yet" end |
#slice(options) ⇒ Object
Fetches result(slice) for specified options (dimensions & measures)
8 9 10 11 12 13 14 15 16 |
# File 'lib/olap_report/cube/query_methods.rb', line 8 def slice() a_table = aggregation([:dimensions]) if ![:skip_aggregated] && a_table a_table.slice([:measures]) else build_relation(*.values_at(:dimensions, :measures)) end end |