コード例 #1
0
 /// <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);
     }
 }
コード例 #2
0
        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]);
                }
            }
        }
コード例 #3
0
        /// <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);
            }
        }
コード例 #4
0
        /// <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);
            }
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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();
            }
        }
コード例 #8
0
 public void Apply(object item, IDimensionEntryResult dimResult)
 {
     Apply((TFact)item, Dimension, dimResult);
 }
コード例 #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 result, IDimensionEntryResult entry, object item);
コード例 #10
0
        /// <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));
        }