Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        public void Apply(TFact item, IDimensionResult <TFact> dimResult)
        {
            if (dimResult == null)
            {
                throw new ArgumentNullException(nameof(dimResult));
            }

            Apply(item, DimensionEntry, dimResult);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        /// <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);
            }
        }
Пример #8
0
        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]);
            }
        }
Пример #9
0
 /// <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);