public override void UpdateMeasures(U cell, MeasureValuesCollection <T> measures, CellContext <T> context) { MolapCell <T> mcell = (MolapCell <T>)(object) cell; foreach (var previousValue in mcell.Values) { context.UpdateOldValue(previousValue.Key, previousValue.Value); } mcell.IncrementOcurrences(); foreach (KeyValuePair <T, object> item in measures) { if (item.Value != null) { ValueType nvalue = (ValueType)item.Value; if (mcell.Values.ContainsKey(item.Key)) { Type measuretype = this._measures[item.Key].DataType; ValueType ovalue = mcell.Values[item.Key]; var functor = GetMeasureAggregationFunction(measuretype); if (functor != null) { context.UpdateNewValue(item.Key, nvalue); mcell.Values[item.Key] = this.Add(ovalue, nvalue, functor); } } else { context.UpdateNewValue(item.Key, nvalue); mcell.Values.Add(item.Key, nvalue); } } } }
public override void UpdateMetrics(U cell, CellContext <T> context) { MolapCell <T> mcell = (MolapCell <T>)(object) cell; foreach (var item in _metrics) { object nvalue = null; try { context.CurrentMetric = item.ID; nvalue = item.MetricExpression.Evaluate(context); } catch (Exception ex) { //to do logging error and error behavior Console.WriteLine(ex.Message); } if (nvalue != null) { if (mcell.Values.ContainsKey(item.ID)) { mcell.Values[item.ID] = (ValueType)nvalue; } else { mcell.Values.Add(item.ID, (ValueType)nvalue); } } else { mcell.Values.Remove(item.ID); } } }