/// <summary> /// Applies a entry to a measure. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult result, IDimensionEntryResult entry, object item) { if (Selector((TFact)item, entry)) { this.Measure.Apply(result, entry, item); } }
private void Apply(TFact item, DimensionEntry <TDimension> entry, IDimensionEntryResult result) { var match = false; if (Dimension.Filter == null || Dimension.Filter(item)) { if (Dimension.EndSelector == null) { match = entry.InRange(Dimension.Selector(item)); } else { match = entry.InRange(Dimension.Selector(item), Dimension.EndSelector(item)); } } if (match) { // Do something foreach (var kvp in result.Values) { kvp.Key.Apply(kvp.Value, result, item); } // All other foreach (var otherDim in result.OtherDimensions) { otherDim.Key.Apply(item, otherDim.Value); } foreach (DimensionEntry <TDimension> child in entry.Children) { Apply(item, child, result.Entries[child]); } } }
/// <summary> /// Applies a entry to a measure. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult result, IDimensionEntryResult entry, object item) { var myResult = (IntMeasureResult)result; if (Selector((TFact)item, entry)) { myResult.Set(myResult.IntValue + 1); } }
/// <summary> /// Applies a entry to a measure. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult result, IDimensionEntryResult entry, object item) { var myResult = (TimeSpanMeasureResult)result; var v = Selector((TFact)item, entry); if (v > myResult.TimeSpanValue) { myResult.Set(v); } }
/// <summary> /// Retrieves the inner-most parent date coordinate of this entry. /// </summary> /// <param name="self"></param> /// <returns>the inner-most parent date coordinate of this entry or null</returns> public static DimensionEntry <DateTime> GetDateTimeEntry(this IDimensionEntryResult self) { while (self != null) { var entry = self.DimensionEntry as DimensionEntry <DateTime>; if (entry != null) { return(entry); } self = self.ParentCoordinate; } return(null); }
public static bool Count <TDimension>(this IDimensionEntryResult current, IDimension dim, Func <DimensionEntry <TDimension>, bool> selector) where TDimension : IComparable { if (current == null) { return(false); } var dimEntryResult = current.CubeCoordinates.FirstOrDefault(c => c.DimensionEntry.Root == dim); if (dimEntryResult != null) { var dimEntry = (DimensionEntry <TDimension>)dimEntryResult.DimensionEntry; if (dimEntry != null) { return(selector(dimEntry)); } } return(false); }
/// <summary> /// Initialize the entry result /// </summary> /// <param name="chainedDimensions"></param> /// <param name="crossingDimensions"></param> /// <param name="parentCoordinate"></param> public void Initialize(IEnumerable <IQueryDimension> chainedDimensions, IEnumerable <IQueryDimension> crossingDimensions, IDimensionEntryResult parentCoordinate) { ParentCoordinate = parentCoordinate; foreach (var child in DimensionEntry.Children) { var result = new DimensionEntryResult <TFact>(child, Measures); Entries[child] = result; result.Initialize(chainedDimensions, crossingDimensions, parentCoordinate); } var nextDim = chainedDimensions == null ? null : chainedDimensions.FirstOrDefault(); if (nextDim != null) { // we have a "next" chained dimension. // Create result and recurse initialisation var nextResult = new DimensionResult <TFact>(nextDim, Measures); OtherDimensions[nextDim] = nextResult; nextResult.Initialize(chainedDimensions.Skip(1), crossingDimensions, this); } else { // no chained dimensions left // generate all crossing permutations foreach (var other in crossingDimensions) { var otherResult = new DimensionResult <TFact>(other, Measures); OtherDimensions[other] = otherResult; otherResult.Initialize(null, crossingDimensions.Where(i => i != other), this); } } foreach (var measure in Measures) { Values[measure] = measure.CreateResult(); } }
public void Apply(object item, IDimensionEntryResult dimResult) { Apply((TFact)item, Dimension, dimResult); }
/// <summary> /// Derived classes should apply a entry to the measure. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public abstract void Apply(IMeasureResult result, IDimensionEntryResult entry, object item);
/// <summary> /// Applies a entry to a measure. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult result, IDimensionEntryResult entry, object item) { var myResult = (DecimalMeasureResult)result; myResult.Set(myResult.DecimalValue + Selector((TFact)item, entry)); }