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