class MDQuery::Dataset::Dataset
a Dataset
is defined over a number of Dimensions with a number of Measures.
Attributes
data[R]
a list of points. each point is a Hash with a value for each Dimension
and a value for each Measure
. keys are as given in the Dimension
and Measure
objects
dimensions[R]
a Hash of Dimensions
keyed by their keys
indexed_data[R]
measures[R]
a Hash of Measures
keyed by their keys
model[R]
the Model
describing how the Dataset
is to be assembled
Public Class Methods
new(model, data)
click to toggle source
# File lib/mdquery/dataset.rb, line 233 def initialize(model, data) @model = model @data = data @measures = model.measure_models.map{|mm| Measure.new(mm, self) }.reduce({}){|mi,m| mi[m.key] = m ; mi} @dimensions = model.dimension_models.map{|dm| Dimension.new(dm, self) }.reduce({}){|di,d| di[d.key] = d ; di} validate index end
Public Instance Methods
datapoint(dimension_values, measure)
click to toggle source
retrieve a datapoint given a hash of {dimension_key=>dimension_values}
# File lib/mdquery/dataset.rb, line 256 def datapoint(dimension_values, measure) d = @indexed_data[dimension_values] d[measure] if d end
inspect()
click to toggle source
# File lib/mdquery/dataset.rb, line 251 def inspect "#<Dataset: dimensions=#{dimensions.inspect}, measures=#{measures.inspect}, data=#{data.inspect}>" end
validate()
click to toggle source
# File lib/mdquery/dataset.rb, line 244 def validate raise "no model!" if !model raise "no data!" if !data raise "no dimensions!" if !dimensions || dimensions.empty? raise "no measures!" if !measures || measures.empty? end
Private Instance Methods
index()
click to toggle source
# File lib/mdquery/dataset.rb, line 274 def index @indexed_data = {} data.each do |point| @indexed_data[index_key(point)] = index_data(point) end @indexed_data end
index_data(point)
click to toggle source
# File lib/mdquery/dataset.rb, line 267 def index_data(point) pc = point.clone dks = dimensions.keys pc.delete_if{|k,v| dks.include?(k)} pc end
index_key(point)
click to toggle source
# File lib/mdquery/dataset.rb, line 263 def index_key(point) Hash[dimensions.keys.map{|k| [k, point[k]]}] end