private void InitializeResults(IDimensionResult <TFact> dimResult, IEnumerable <IDimensionResult <TFact> > chainedDimensions, IEnumerable <IDimensionResult <TFact> > crossingDimensions, IDimensionResult <TFact> parentCoordinate) { var nextDim = chainedDimensions?.FirstOrDefault(); // We have a "next" chained dimension. // Create result and recurse initialization if (nextDim != null) { InitializeResults(dimResult == null ? nextDim : dimResult.AddToOtherDimension(nextDim), chainedDimensions.Skip(1), crossingDimensions, dimResult); } // No chained dimensions set/left // Generate all crossing permutations else { foreach (var other in crossingDimensions) { InitializeResults(dimResult == null ? other : dimResult.AddToOtherDimension(other), null, crossingDimensions.Where(i => i != other), dimResult); } } if (dimResult == null) { return; } dimResult.Initialize(parentCoordinate); foreach (var child in dimResult.DimensionEntry.Children) { InitializeResults(dimResult.AddChild(child), chainedDimensions, crossingDimensions, parentCoordinate); } }
/// <summary> /// Applies a entry to a measure result. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult <TFact> result, IDimensionResult <TFact> entry, TFact item) { var myResult = (DoubleMeasureResult <TFact>)result ?? throw new ArgumentNullException(nameof(result)); myResult.Set(myResult.DoubleValue + Selector(item, entry)); }
public void Apply(TFact item, IDimensionResult <TFact> dimResult) { if (dimResult == null) { throw new ArgumentNullException(nameof(dimResult)); } Apply(item, DimensionEntry, dimResult); }
/// <summary> /// Initialize the entry result /// </summary> /// <param name="parentCoordinate"></param> public IDimensionResult <TFact> Initialize(IDimensionResult <TFact> parentCoordinate) { foreach (var measure in Measures) { MeasureResults[measure] = measure.CreateResult(); } ParentCoordinate = (DimensionResult <TDimension, TFact>)parentCoordinate; return(this); }
/// <summary> /// Applies a entry to a measure result. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult <TFact> result, IDimensionResult <TFact> entry, TFact item) { var myResult = (TimeSpanMeasureResult <TFact>)result ?? throw new ArgumentNullException(nameof(result)); var v = Selector(item, entry); if (v < myResult.TimeSpanValue) { myResult.Set(v); } }
public IDimensionResult <TFact> AddToOtherDimension(IDimensionResult <TFact> entry) { if (entry == null) { throw new ArgumentNullException(nameof(entry)); } var newResult = new DimensionResult <TDimension, TFact>(entry.DimensionEntry, Measures); OtherDimensions[entry] = newResult; return(newResult); }
/// <summary> /// Applies a entry to a measure result. /// </summary> /// <param name="result"></param> /// <param name="entry"></param> /// <param name="item"></param> public override void Apply(IMeasureResult <TFact> result, IDimensionResult <TFact> entry, TFact item) { if (result == null) { throw new ArgumentNullException(nameof(result)); } if (Selector(item, entry)) { Measure.Apply(result, entry, item); } }
private void Apply(TFact item, IDimensionEntry entry, IDimensionResult <TFact> result) { var root = ((Dimension <TDimension, TFact>)DimensionEntry.Root); if (!root.CheckFilter(item, entry)) { return; } // Do something result.ProvideItemToMeasures(item); // All other result.ProvideItemToOtherDimensions(item); // Provide item to Children foreach (var child in entry.Children) { Apply(item, child, result.Children[child]); } }
/// <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 <TFact> result, IDimensionResult <TFact> entry, TFact item);