class MDQuery::Dataset::Dimension

describes a Dimension consisting of one or more segments

Attributes

dataset[R]

Dataset this Dimension belongs to

key[R]

key for this Dimension

label[R]

Optional label of the Dimension

segments[R]

ordered list of one or more DimensionSegments

values[R]

an ordered list of values for the dimension. May be static or extracted from the data source, depending on DimensionSegment definitions. It is the concatentation of the values from each DimensionSegment in the Dimension

Public Class Methods

new(model, dataset) click to toggle source
# File lib/mdquery/dataset.rb, line 113
def initialize(model, dataset)
  @dataset = dataset
  @key = model.key
  @label = model.label

  @segments = model.segment_models.map{|sm| DimensionSegment.new(sm, self) }
  @segment_index = @segments.reduce({}){|si, s| si[s.key] = s ; si}

  @values = segments.map(&:values).reduce(&:+)
  @dimension_value_index = segments.map(&:dimension_values).reduce(&:+).reduce({}){|dvi,dv| dvi[dv.value] = dv ; dvi}

  validate
end

Public Instance Methods

[](key) click to toggle source

lookup a segment by key

# File lib/mdquery/dataset.rb, line 143
def [](key)
  segment(key)
end
dimension_value_for(value) click to toggle source

the DimensionValue describing value or nil

# File lib/mdquery/dataset.rb, line 175
def dimension_value_for(value)
  @dimension_value_index[value]
end
dimension_values() click to toggle source
# File lib/mdquery/dataset.rb, line 170
def dimension_values
  segments.map(&:dimension_values).reduce(&:+)
end
dimension_values_for_segments(segment_keys) click to toggle source

return an ordered list of DimensionValues for 0 or more segments.

  • segment_keys a list of segment keys. if empty, methods return all DimensionValues

for all segments, otherwise returns the concatenation of DimensionValues for each identified segment

# File lib/mdquery/dataset.rb, line 162
def dimension_values_for_segments(segment_keys)
  if segment_keys && !segment_keys.empty?
    segment_keys.map{|sk| segment(sk)}.map(&:dimension_values).reduce(&:+)
  else
    dimension_values
  end
end
inspect() click to toggle source
# File lib/mdquery/dataset.rb, line 133
def inspect
  "#<Dimension: key=#{key.inspect}, label=#{label.inspect}, segments=#{segments.inspect}>"
end
label_for(value) click to toggle source

the label for the value or nil

# File lib/mdquery/dataset.rb, line 180
def label_for(value)
  (dv = dimension_value_for(value)) && dv.label
end
segment(key) click to toggle source

lookup a segment by key

# File lib/mdquery/dataset.rb, line 138
def segment(key)
  @segment_index[key]
end
validate() click to toggle source
# File lib/mdquery/dataset.rb, line 127
def validate
  raise "no dataset!" if !dataset
  raise "no key!" if !key
  raise "no segments!" if !segments || segments.empty?
end
values_for_segments(segment_keys) click to toggle source

return an ordered list of values for 0 or more segments.

  • segment_keys a list of segment keys. if empty, methods returns values,

otherwise returns the concatentation of values for each identified segment

# File lib/mdquery/dataset.rb, line 150
def values_for_segments(segment_keys)
  if segment_keys && !segment_keys.empty?
    segment_keys.map{|sk| segment(sk)}.map(&:values).reduce(&:+)
  else
    values
  end
end