Class: MDQuery::Dataset::Dataset

Inherits:
Object
  • Object
show all
Defined in:
lib/mdquery/dataset.rb

Overview

a Dataset is defined over a number of Dimensions with a number of Measures.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, data) ⇒ Dataset

Returns a new instance of Dataset.



233
234
235
236
237
238
239
240
241
242
# 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

Instance Attribute Details

#dataObject (readonly)

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



222
223
224
# File 'lib/mdquery/dataset.rb', line 222

def data
  @data
end

#dimensionsObject (readonly)

a Hash of Dimensions keyed by their keys



225
226
227
# File 'lib/mdquery/dataset.rb', line 225

def dimensions
  @dimensions
end

#indexed_dataObject (readonly)

index of points from data, where key is a Hash of all Dimension key=>value pairs, and value is all Measure key=>value pairs



231
232
233
# File 'lib/mdquery/dataset.rb', line 231

def indexed_data
  @indexed_data
end

#measuresObject (readonly)

a Hash of Measures keyed by their keys



228
229
230
# File 'lib/mdquery/dataset.rb', line 228

def measures
  @measures
end

#modelObject (readonly)

the Model describing how the Dataset is to be assembled



218
219
220
# File 'lib/mdquery/dataset.rb', line 218

def model
  @model
end

Instance Method Details

#datapoint(dimension_values, measure) ⇒ Object

retrieve a datapoint given a hash of dimension_key=>dimension_values



256
257
258
259
# File 'lib/mdquery/dataset.rb', line 256

def datapoint(dimension_values, measure)
  d = @indexed_data[dimension_values]
  d[measure] if d
end

#inspectObject



251
252
253
# File 'lib/mdquery/dataset.rb', line 251

def inspect
  "#<Dataset: dimensions=#{dimensions.inspect}, measures=#{measures.inspect}, data=#{data.inspect}>"
end

#validateObject



244
245
246
247
248
249
# 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