class Olap::View::Parse
Attributes
response[R]
Public Class Methods
new(response)
click to toggle source
# File lib/olap/view/parse.rb, line 5 def initialize response @response = response end
Public Instance Methods
aggregate(dimension, measures = [])
click to toggle source
Aggregate result by one of the dimensions and return only listed measures
# File lib/olap/view/parse.rb, line 10 def aggregate dimension, measures = [] result = [] index = {} response.rows.each{|row| label = row[:labels].detect{|label| label[:name] == dimension} values = row[:values].collect{|v| next unless measures.include? v[:measure] v.delete :fmt_value v }.compact if i = index[label] for j in 0..result[i][:values].count-1 result[i][:values][j][:value] = result[i][:values][j][:value].to_f + values[j][:value].to_f end else index[label] = result.count result << { rownum: result.count + 1, labels: [label], values: values } end } result end
dimensions_caption(dimension = nil)
click to toggle source
Return collection of dimensions or selected dimension by name
-
:name
the name of dimension -
:caption
display name of dimension
# File lib/olap/view/parse.rb, line 42 def dimensions_caption dimension = nil dimension.nil? ? response.dimensions : response.dimensions.collect{|d| next unless dimension == d[:name] d }.compact end
dimensions_row(row, merge_dimensions = false)
click to toggle source
# File lib/olap/view/parse.rb, line 67 def dimensions_row row, merge_dimensions = false if merge_dimensions label_value = row.collect{|label| next if label[:value].to_s.empty? label[:value].to_s }.compact.join(', ') label_fmt_value = row.collect{|label| next if label[:fmt_value].to_s.empty? label[:fmt_value] }.compact.join(', ') [{type: 'dimension', value: label_value.to_s, fmt_value: label_fmt_value.to_s}] else row.collect{|label| {type: 'dimension', value: label[:value].to_s, fmt_value: label[:fmt_value]}} end end
measures_caption(measures = [])
click to toggle source
Return collection of measures or selected measures by name
-
:name
the name of measure -
:caption
display name of measure
# File lib/olap/view/parse.rb, line 55 def measures_caption measures = [] if measures.empty? || measures.nil? response.measures else measures.collect{|measure| next unless col = response.measures.detect{|value| value[:name] == measure} col }.compact end end
measures_row(row, measures = [])
click to toggle source
# File lib/olap/view/parse.rb, line 83 def measures_row row, measures = [] if measures.empty? row.collect{|value| {type: 'measure', value: value[:value].to_f, fmt_value: value[:fmt_value]} }.compact else measures.collect{|measure| next unless col = row.detect{|value| value[:measure] == measure} {type: 'measure', value: col[:value].to_f, fmt_value: col[:fmt_value]} }.compact end end
table(dimension = nil, measures = [], merge_dimensions = false)
click to toggle source
Collection of result rows and aggregate collection by dimension and measures
type - dimension or measure value - metric value fmt_value - formatted metric value
# File lib/olap/view/parse.rb, line 100 def table dimension = nil, measures = [], merge_dimensions = false (dimension && !measures.empty? ? aggregate(dimension, measures) : response.rows).collect{|row| dimensions_row(row[:labels], merge_dimensions) + measures_row(row[:values], measures) } end