Ejemplo n.º 1
0
        private void ProcessCalculatedMembers(Line l, List <CubeDataNumeric> data)
        {
            var hasCalculatedMembers = false;

            foreach (var ll in l.Levels)
            {
                foreach (var m in ll.FUniqueNamesArray.Values)
                {
                    if (m is CalculatedMember)
                    {
                        hasCalculatedMembers = true;
                        break;
                    }
                }
            }
            if (!hasCalculatedMembers)
            {
                return;
            }

            var data2 = new List <CubeDataNumeric>();

            foreach (var d in data)
            {
                var mm = l.fM.DecodeLineIdx(d.LineIdx);
                var lm = new List <Member>(mm.Length);
                for (var i = 0; i < mm.Length; i++)
                {
                    lm.Add(l.Levels[i].GetMemberByID(mm[i]));
                }
                var a = new ICubeAddress(FGrid, lm);
                a.Measure     = l.Measure;
                a.MeasureMode = l.fMode;
                foreach (var ll in l.Levels)
                {
                    foreach (var m in ll.FUniqueNamesArray.Values)
                    {
                        if (m is CalculatedMember)
                        {
                            a.AddMember(m);
                            object v;
                            CellFormattingProperties f;
                            if (DoCalculate(FGrid, a, out v, out f))
                            {
                                var dn = new CubeDataNumeric();
                                dn.FormattedValue = f.FormattedValue;
                                dn.LineIdx        = a.FLineIdx;
                                dn.MemberIDs      = l.fM.DecodeLineIdx(dn.LineIdx);
                                dn.Value          = Convert.ToDouble(v);
                                data2.Add(dn);
                            }
                        }
                    }
                }
            }

            data.AddRange(data2);
        }
Ejemplo n.º 2
0
        private void ProcessCalculatedMeasures(Line l, List <CubeDataNumeric> data)
        {
            var hidx = new HashSet <long>();

            foreach (var m in l.Measure.AffectedMeasures())
            {
                var cl = l.MetaLine.GetLine(l.fHierId, m, m.ShowModes[0]);
                if (l == cl)
                {
                    continue;
                }

                foreach (var d in cl.RetrieveCubeData(null))
                {
                    if (hidx.Contains(d.LineIdx))
                    {
                        continue;
                    }
                    hidx.Add(d.LineIdx);
                    var lm = new List <Member>(d.MemberIDs.Length);
                    for (var i = 0; i < d.MemberIDs.Length; i++)
                    {
                        lm.Add(l.Levels[i].GetMemberByID(d.MemberIDs[i]));
                    }
                    var a = new ICubeAddress(FGrid, lm);
                    a.Measure     = l.Measure;
                    a.MeasureMode = l.fMode;
                    var eval = new Evaluator(FGrid, a);
                    var dn   = new CubeDataNumeric();
                    var o    = DoCalculateExpression(FGrid, a, eval);
                    if (o != null)
                    {
                        dn.Value          = Convert.ToDouble(o);
                        dn.FormattedValue = l.Measure.FormatValue(o, l.Measure.DefaultFormat);
                        dn.LineIdx        = d.LineIdx;
                        dn.MemberIDs      = d.MemberIDs;
                        data.Add(dn);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        internal override List <CubeDataNumeric> RetrieveCubeData(List <Member> restriction)
        {
            RetrieveDataForChart(restriction);

            var Result = new List <CubeDataNumeric>();

            int[] r = null;
            if (restriction != null)
            {
                r = new int[fM.fLevels.Count];
                foreach (var m in restriction)
                {
                    var i = fM.fLevels.IndexOf(m.Level);
                    r[i] = i >= 0 ? m.ID : -1;
                }
            }
            for (var i = 0; i < fIndexes.Length; i++)
            {
                double v = 0;
                try
                {
                    v = Convert.ToDouble(fData[i].Value);
                }
                catch
                {
                    continue;
                }
                var mm = fM.DecodeLineIdx(fIndexes[i]);
                // Exclude grouped members
                var grouped   = false;
                var invisible = false;
                for (var j = 0; j < mm.Length; j++)
                {
                    if (Levels[j].FStaticMembers.Count >= mm[j])
                    {
                        var tm = Levels[j].GetMemberByID(mm[j]);
                        if (tm.Parent is GroupMember)
                        {
                            grouped = true;
                            break;
                        }
                    }
                    var m2 = Levels[j].GetMemberByID(mm[j]);
                    if (!m2.Visible)
                    {
                        invisible = true;
                        break;
                    }
                }
                if (grouped || invisible)
                {
                    continue;
                }
                if (r != null)
                {
                    var b = true;
                    for (var j = 0; j < r.Length; j++)
                    {
                        if (r[j] >= 0 && r[j] != mm[j])
                        {
                            b = false;
                            break;
                        }
                    }
                    if (!b)
                    {
                        continue;
                    }
                }
                var d = new CubeDataNumeric();
                d.MemberIDs      = mm;
                d.Value          = v;
                d.FormattedValue = fData[i].FormattedValue;
                d.LineIdx        = fIndexes[i];
                Result.Add(d);
            }
            return(Result);
        }