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); }
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); } } } }
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); }