class MDQuery::Dataset::Dimension
describes a Dimension
consisting of one or more segments
Attributes
key for this Dimension
Optional label of the Dimension
ordered list of one or more DimensionSegments
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
# 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
lookup a segment by key
# File lib/mdquery/dataset.rb, line 143 def [](key) segment(key) end
the DimensionValue
describing value
or nil
# File lib/mdquery/dataset.rb, line 175 def dimension_value_for(value) @dimension_value_index[value] end
# File lib/mdquery/dataset.rb, line 170 def dimension_values segments.map(&:dimension_values).reduce(&:+) end
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
# File lib/mdquery/dataset.rb, line 133 def inspect "#<Dimension: key=#{key.inspect}, label=#{label.inspect}, segments=#{segments.inspect}>" end
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
lookup a segment by key
# File lib/mdquery/dataset.rb, line 138 def segment(key) @segment_index[key] end
# 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
return an ordered list of values for 0 or more segments.
-
segment_keys
a list of segment keys. if empty, methods returnsvalues
,
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