internal bool GetCellValue(string LineID, int HierID, long LineIdx, string MeasureID, int ModeID, out object Value) { var A = new ICubeAddress(FGrid, LineID, HierID, LineIdx, MeasureID, ModeID); return(GetCellValue(A, out Value)); }
internal override bool GetCell(ICubeAddress Address, out object Value) { CheckLineAlive(); var i = Array.BinarySearch(fIndexes, Address.FLineIdx); if (i >= 0) { Value = fData[i].Value; return(true); } //fM.FGrid.isCalculatedState = true; base.GetCell(Address, out Value); //fM.FGrid.isCalculatedState = false; i = Array.BinarySearch(fIndexes, Address.FLineIdx); if (i < 0) { Value = null; return(false); } Value = fData[i].Value; return(true); }
private bool DoCalculate(OlapControl Grid, ICubeAddress Address, out object Value, out CellFormattingProperties Formatted) { var fEvent = new CalcMemberArgs(); fEvent.fEvaluator = new Evaluator(Grid, Address); if (Address.IsCalculatedByExpression) { Value = DoCalculateExpression(Grid, Address, fEvent.fEvaluator); fEvent.ReturnValue = Address.Measure.FormatValue(Value, Address.Measure.DefaultFormat); Formatted = new CellFormattingProperties(fEvent.ReturnValue, fEvent.ReturnBackColor, fEvent.ReturnForeColor, fEvent.fFontStyle, fEvent.fFontName, fEvent.fFontSize); return(Value != null); } fEvent.fValue = null; Grid.EventCalcMember(fEvent); Formatted = new CellFormattingProperties(fEvent.ReturnValue, fEvent.ReturnBackColor, fEvent.ReturnForeColor, fEvent.fFontStyle, fEvent.fFontName, fEvent.fFontSize); Value = fEvent.ReturnData; return(Value != null); }
/// <summary> /// Returns a cube cell value passed by the Address parameter. /// </summary> /// <param name="Address"></param> /// <returns></returns> public object GetValue(ICubeAddress Address) { object Result; fGrid.Engine.GetCellValue(Address, out Result); return(Result); }
public SerializedICubeAddress(ICubeAddress address) { if (address.Measure != null) { MeasureDisplayName = address.Measure.DisplayName; MeasureUniqueName = address.Measure.UniqueName; } if (address.MeasureMode != null) { MeasureMode = address.MeasureMode.Caption; } if (address.LevelsCount > 0) { Levels = new string[address.LevelsCount]; Members = new string[address.LevelsCount]; for (var i = 0; i < address.LevelsCount; i++) { Levels[i] = address.Levels(i).UniqueName; Members[i] = address.Members(i).UniqueName; } } Tag = address.Tag; }
/// <summary> /// Calculates a nonformatted value of the Cube cell specified by its /// multidimensional address. /// </summary> public bool GetCellValue(ICubeAddress Address, out object Value) { Value = null; var M = GetMetaline(Address.FLevelsAndMembers.Keys); if (Address.Measure == null) { return(true); } if (CalculatedByServer(Address.Measure)) { var L = M.GetLine(Address.FHierID, Address.Measure, IsNativeDataPresent(Address.MeasureMode) ? Address.MeasureMode : Address.Measure.ShowModes[0]); var Result = L.GetCell(Address, out Value); if (Result) { return(true); } CellFormattingProperties Formatted; return(GetCalculatedCellValue(Address, out Value, out Formatted)); //else return true; } { CellFormattingProperties Formatted; return(GetCalculatedCellValue(Address, out Value, out Formatted)); } }
internal virtual bool GetCell(ICubeAddress Address, out object Value) { Value = null; if (fM.FGrid.DeferLayoutUpdate) { return(false); } var r = new Dictionary <Level, Member>(Address.FLevelsAndMembers.Count); var levelcount = Address.LevelsCount; for (var i = 0; i < levelcount; i++) { var m = Address.Members(i); if (m.FMemberType == MemberType.mtCalculated && string.IsNullOrEmpty(((CalculatedMember)m).Expression)) { return(false); } r.Add(Address.Levels(i), m); } if (fM.FGrid.isCalculatedState) { CurrentMap.ClearRequestMap(); CurrentMap.AddRequest(r); DoRetrieveData(); CurrentMap.ClearRequestMap(); } return(false); }
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); }
internal ChartCellDetails(OlapControl grid, List <Level> clue, int[] memberIDs) { fGrid = grid; Address = new ICubeAddress(fGrid); for (var i = 0; i < clue.Count; i++) { Address.AddMember(clue[i].GetMemberByID(memberIDs[i])); } }
/// <summary> /// Creates an instance of the ICubeAddress interface. /// </summary> /// <param name="Measure"></param> /// <param name="Members"></param> /// <returns></returns> public ICubeAddress CreateCubeAddress(Measure Measure, params Member[] Members) { var l = new List <Member>(Members.Length); foreach (var m in Members) { l.Add(m); } var Result = new ICubeAddress(FGrid, l); Result.Measure = Measure; return(Result); }
internal bool GetCalculatedCellValue(ICubeAddress Address, out object Value, out CellFormattingProperties Formatted) { if (Address.Measure != null && Address.Measure.AggregateFunction == OlapFunction.stCalculated) { return(DoCalculate(FGrid, Address, out Value, out Formatted)); } if (Address.FLevelsAndMembers.Values.Any(m => m.MemberType == MemberType.mtCalculated)) { return(DoCalculate(FGrid, Address, out Value, out Formatted)); } Value = null; Formatted = new CellFormattingProperties(""); return(false); }
/// <summary> /// Updates the fact table contents for the records aggregated in the Cube cell with /// a specified address /// </summary> public override void Writeback(ICubeAddress Address, object NewValue, WritebackMethod Method) { ((MOlapCube)FCube).EnsureConnected(); var sb = new StringBuilder("UPDATE CUBE ["); sb.Append(((MOlapCube)FCube).CubeName); sb.Append("] SET ("); sb.Append(Address.Measure.UniqueName); for (var i = 0; i < Address.LevelsCount; i++) { sb.Append(","); sb.Append(Address.Members(i).UniqueName); } sb.Append(") = "); var nv = Convert.ToDouble(NewValue); sb.Append(nv.ToString(CultureInfo.InvariantCulture.NumberFormat)); sb.Append(" "); switch (Method) { case WritebackMethod.wmEqualAllocation: sb.Append(" USE_EQUAL_ALLOCATION"); break; case WritebackMethod.wmEqualIncrement: sb.Append(" USE_EQUAL_INCREMENT"); break; case WritebackMethod.wmWeightedAllocation: sb.Append(" USE_WEIGHTED_ALLOCATION"); break; case WritebackMethod.wmWeightedIncrement: sb.Append(" USE_WEIGHTED_INCREMENT"); break; } ((MOlapCube)FCube).ExecuteMDXCommand(sb.ToString()); Clear(); RebuildGridMembers(); }
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); } } } }
public ICubeAddress GetCubeAddress(OlapControl grid) { var a = new ICubeAddress(grid); if (!string.IsNullOrEmpty(MeasureUniqueName)) { a.Measure = grid.Measures.Find(MeasureUniqueName); if (a.Measure == null) { a.Measure = grid.Measures.FindByDisplayName(MeasureDisplayName); } if (a.Measure != null) { a.MeasureMode = a.Measure.ShowModes.Find(MeasureMode); } } if (Levels != null) { for (var i = 0; i < Levels.Length; i++) { var l = grid.Dimensions.FindLevel(Levels[i]); Member m = null; if (l != null) { m = l.FindMember(Members[i]); } if (m != null) { a.AddMember(m); } } } a.Tag = Tag; return(a); }
internal bool GetCellFormatted(ICubeAddress Address, out object Value, out CellFormattingProperties Formatted) { CheckLineAlive(); Formatted = new CellFormattingProperties(); var i = Array.BinarySearch(fIndexes, Address.FLineIdx); if (i < 0) { Value = null; Formatted.FormattedValue = ""; return(false); } Value = fData[i].Value; if (Address.Measure != null && Address.Measure.FCubeMeasure != null && Address.MeasureMode.Mode == MeasureShowModeType.smNormal && Address.Measure.DefaultFormat != Address.Measure.CubeMeasure.DefaultFormat) { Formatted.FormattedValue = Address.Measure.FormatValue(Value, Address.Measure.DefaultFormat); } else { var d = fData[i]; Formatted.FormattedValue = d.FormattedValue; if (d.Colors != null) { Formatted.BackColor = d.Colors.BackColor; Formatted.ForeColor = d.Colors.ForeColor; } if (d.Fonts != null) { Formatted.FontStyle = d.Fonts.Style; Formatted.FontFamily = d.Fonts.FontName; Formatted.FontSize = d.Fonts.FontSize; } } return(true); }
internal IEnumerable <Member> GetMembersList(ICubeAddress a, Members MembersList) { if (a.Measure == null || !CalculatedByServer(a.Measure) || MembersList[0].MemberType == MemberType.mtMeasure || MembersList[0].MemberType == MemberType.mtMeasureMode) { return(MembersList.ToArray()); } if (a.GetMemberByHierarchy(MembersList[0].Level.Hierarchy) != null) { return(MembersList.ToArray()); } var aa = a.Clone(); aa.AddMember(MembersList[0]); var M = GetMetaline(aa.FLevelsAndMembers.Keys); var L = M.GetLine(aa.FHierID, aa.Measure, aa.Measure.ShowModes[0]); return(L.GetMembersList(aa, MembersList)); }
internal bool HasCellValue(ICubeAddress address) { object V; if (address.Measure != null) { return(GetCellValue(address, out V)); } var a = address.Clone(); if (FGrid.FCellSet.FVisibleMeasures.Count == 0) { return(true); } foreach (var m in FGrid.FCellSet.FVisibleMeasures) { a.Measure = m; if (GetCellValue(a, out V)) { return(true); } } return(false); }
internal abstract IEnumerable <Member> GetMembersList(ICubeAddress a, Members MembersList);
/// <summary> /// Updates the fact table contents for the records aggregated in the Cube cell with /// the specified address. /// </summary> /// <remarks> /// <para> /// For the Grid with the MOlapCube component as the data source, the MDX /// "Writeback" command with the appropriate parameters is fulfilled. /// </para> /// <para> /// For the grid with the TOLAPCube component as the data source, the OnWriteback /// event is called. /// </para> /// </remarks> /// <param name="Address">The <see cref="ICubeAddress">address</see> of cube cell</param> /// <param name="NewValue">The new value for the cell</param> /// <param name="Method">The <see cref="TWritebackMethod">type of writeback distribution</see></param> public abstract void Writeback(ICubeAddress Address, object NewValue, WritebackMethod Method);
/// <summary> /// Performs the Drillthrough operation against the Cube and returns a DataTable /// filled with source records aggregated by the Cube cell with the specified /// address. /// </summary> /// <param name="Address">The cube cell address.</param> /// <param name="dataTable">The DataTable to be filled with source records.</param> /// <param name="RowsToFetch">When more than 0, limits the max number of records in the resulting DataTable.</param> /// <param name="columns">When defined, limits the columns to include into the resulting DataTable.</param> /// <param name="DrillThroughMethod">Defines the method to use when fetching records from the source data schema.</param> public abstract void Drillthrough(ICubeAddress Address, DataTable dataTable, int RowsToFetch, ICollection <string> columns, DrillThroughMethod DrillThroughMethod);
internal ChartCell(ChartCellSet ACS, int ARow, int ACol, Dictionary <long, Dictionary <ChartAxis, ChartArea> > cell_details) { CS = ACS; FRow = ARow; FCol = ACol; var i = ACS.FFixedColumns - 1 + ARow * ACS.FFixedColumns; var RM = i >= 0 ? ACS.FRowMembersArray[i] as CellsetMember : null; if (RM != null && RM.FIsPager) { return; } i = ACol + (ACS.FFixedRows - 1) * ACS.ColumnCount; var CM = i >= 0 ? ACS.FColMembersArray[i] as CellsetMember : null; if (CM != null && CM.FIsPager) { return; } var AM = new List <Member>(); Hierarchy H = null; var C = RM; var MID = -1; while (C != null) { if (C.FMember != null) { if (C.FMember.MemberType == MemberType.mtMeasure) { MID = C.FMember.ID; } else { if (C.FMember.MemberType == MemberType.mtMeasureMode) { AM.Add(C.FMember); } else if (C.FMember.FLevel.FHierarchy != H) { AM.Add(C.FMember); H = C.FMember.FLevel.FHierarchy; } ; } } C = C.FParent; } C = CM; while (C != null) { if (C.FMember != null) { if (C.FMember.MemberType == MemberType.mtMeasure) { MID = C.FMember.ID; } else { if (C.FMember.MemberType == MemberType.mtMeasureMode) { AM.Add(C.FMember); } else if (C.FMember.FLevel.FHierarchy != H) { AM.Add(C.FMember); H = C.FMember.FLevel.FHierarchy; } ; } } C = C.FParent; } A = ACS.FGrid.FEngine.CreateCubeAddress(AM); Dictionary <ChartAxis, ChartArea> _d; cell_details.TryGetValue(A.FLineIdx, out _d); data = new ChartArea[CS.YAxesDescriptor.ChartAreas.Count]; if (_d != null) { foreach (var caa in _d.Values) { for (var ii = 0; ii < CS.YAxesDescriptor.ChartAreas.Count; ii++) { if (caa.AxisY == CS.YAxesDescriptor.ChartAreas[ii].AxisData) { data[ii] = caa; caa.ConvertSeries(this); break; } } } } for (var ii = 0; ii < CS.YAxesDescriptor.ChartAreas.Count; ii++) { if (data[ii] == null) { data[ii] = new ChartArea(CS.YAxesDescriptor.ChartAreas[ii].AxisData); } } foreach (var ca2 in ((IChartCell)this).Charts) { var ay = ca2.AxisY; if (ay != null && ay.Descriptor != null && ay.Descriptor.DescriptorObject is Level) { var l = (Level)ay.Descriptor.DescriptorObject; foreach (var ca in data) { foreach (var cs in ca.SeriesList) { if (cs.Data.Count > 0) { cs.Data.Sort(new ChartCellDetails.YLabelComparer()); } } } } } var ax = ((IChartCell)this).AxisX; if (ax != null && ax.Descriptor != null && ax.Descriptor.DescriptorObject is Level) { var l = (Level)ax.Descriptor.DescriptorObject; foreach (var ca in data) { foreach (var cs in ca.SeriesList) { if (cs.Data.Count > 0) { cs.Data.Sort(new ChartCellDetails.XLabelComparer()); } } } } }
internal Evaluator(OlapControl Grid, ICubeAddress Address) { fGrid = Grid; fAddress = Address; }
/// <summary> /// Performs the Drillthrough operation against the cube and returns a DataTable /// filled with source records aggregated by the cube cell with the specified /// address. /// </summary> /// <param name="Address">The cube cell address.</param> /// <param name="dataTable">The DataTable to be filled with source records.</param> /// <param name="RowsToFetch">When more than 0, limits the max number of records in the resulting DataTable.</param> /// <param name="columns">When defined, limits the columns to include into the resulting DataTable.</param> /// <param name="DrillThroughMethod">Defines the method to use when fetching records from the source data schema.</param> public override void Drillthrough(ICubeAddress Address, DataTable dataTable, int RowsToFetch, ICollection <string> columns, DrillThroughMethod DrillThroughMethod) { Drillthrough(Address, dataTable, RowsToFetch, columns); }
internal bool HasCellValue(string LineID, int HierID, long LineIdx, string MeasureID, int ModeID) { var A = new ICubeAddress(FGrid, LineID, HierID, LineIdx, MeasureID, ModeID); return(HasCellValue(A)); }
internal DataCell(CellSet acs, int aRow, int aCol) { CellSet = acs; StartRow = aRow; StartColumn = aCol; #if DEBUG if (StartColumn == 1 && StartRow == 21) { } #endif var rm = acs.FRowMembersArray[acs.FFixedColumns - 1 + aRow * acs.FFixedColumns] as CellsetMember; if (rm != null && rm.FIsPager) { Address = new ICubeAddress(acs.FGrid); return; } var cm = acs.FColMembersArray[aCol + (acs.FFixedRows - 1) * acs.ColumnCount] as CellsetMember; if (cm != null && cm.FIsPager) { Address = new ICubeAddress(acs.FGrid); return; } var memberlist = new List <Member>(); Hierarchy H = null; var C = rm; var mid = -1; while (C != null) { IsTotal |= C.FIsTotal; IsTotalHorizontal |= C.FIsTotal; if (C.FMember != null) { if (C.FMember.MemberType == MemberType.mtMeasure) { mid = C.FMember.ID; } else { if (C.FMember.MemberType == MemberType.mtMeasureMode) { memberlist.Add(C.FMember); } else if (C.FMember.FLevel.FHierarchy != H) { memberlist.Add(C.FMember); H = C.FMember.FLevel.FHierarchy; } ; } } C = C.FParent; } C = cm; while (C != null) { IsTotal |= C.FIsTotal; IsTotalVertical |= C.FIsTotal; if (C.FMember != null) { if (C.FMember.MemberType == MemberType.mtMeasure) { mid = C.FMember.ID; } else { if (C.FMember.MemberType == MemberType.mtMeasureMode) { memberlist.Add(C.FMember); } else if (C.FMember.FLevel.FHierarchy != H) { memberlist.Add(C.FMember); H = C.FMember.FLevel.FHierarchy; } ; } } C = C.FParent; } #if DEBUG if (IsTotal) { } #endif switch (acs.FGrid.Mode) { case OlapGridMode.gmStandard: Address = acs.FGrid.FEngine.CreateCubeAddress(memberlist); if (mid >= 0) { Address.Measure = acs.Grid.fMeasures[mid]; } else { if (rm != null && rm.FMeasureID != string.Empty) { Address.Measure = acs.Grid.fMeasures[rm.FMeasureID]; } if (cm != null && cm.FMeasureID != string.Empty) { Address.Measure = acs.Grid.fMeasures[cm.FMeasureID]; } } if (Address.Measure != null) { var m = Address.Measure.DefaultMode; if (m != null) { Address.MeasureMode = m; } } acs.FGrid.FEngine.GetCellFormattedValue(this, out _fValue, out _fFormattingProperties); var olapgrid = acs.FGrid; if (olapgrid != null && olapgrid.AxesLayout.ColorBackAxisItem != null && olapgrid.AxesLayout.ColorBackAxisItem is Measure) { var aOld = Address; var aTmp = acs.FGrid.FEngine.CreateCubeAddress(memberlist); Address = aTmp; var mcolor = olapgrid.AxesLayout.ColorBackAxisItem as Measure; Address.Measure = mcolor; object backvalue; CellFormattingProperties backformat; if (acs.FGrid.FEngine.GetCellFormattedValue(this, out backvalue, out backformat)) { RankBackground = GetColorRank(backvalue); } Address = aOld; } if (olapgrid != null && olapgrid.AxesLayout.fColorForeAxisItem != null && olapgrid.AxesLayout.fColorForeAxisItem is Measure //&& olapgrid.VM_GridAxisLayout.ColorForeAxisItem.AsMeasure == _a.Measure ) { var aOld = Address; var aTmp = acs.FGrid.FEngine.CreateCubeAddress(memberlist); Address = aTmp; var mcolor = olapgrid.AxesLayout.fColorForeAxisItem as Measure; Address.Measure = mcolor; object forevalue; CellFormattingProperties foreformat; if (acs.FGrid.FEngine.GetCellFormattedValue(this, out forevalue, out foreformat)) { RankForeground = GetColorRank(forevalue); } Address = aOld; } if (olapgrid != null && olapgrid.AxesLayout.fColorAxisItem is Hierarchy) { string un = null; var h = olapgrid.AxesLayout.fColorAxisItem as Hierarchy; un = FindByAHierarchy(ColumnMember, h); if (string.IsNullOrEmpty(un)) { un = FindByAHierarchy(RowMember, h); } if (un.IsFill()) { MemberBackground = un; } } if (olapgrid != null && olapgrid.AxesLayout.fColorForeAxisItem is Hierarchy) { string un = null; var h = olapgrid.AxesLayout.fColorForeAxisItem as Hierarchy; un = FindByAHierarchy(ColumnMember, h); if (string.IsNullOrEmpty(un)) { un = FindByAHierarchy(RowMember, h); } if (un.IsFill()) { MemberForeground = un; } } break; default: acs.FGrid.Cube.RestoreQueryData( aCol - acs.FFixedColumns + (aRow - acs.FFixedRows) * (acs.ColumnCount - acs.FFixedColumns), out _fValue, out _fFormattingProperties); if (string.IsNullOrEmpty(_fFormattingProperties.FormattedValue) && _fValue != null) { _fFormattingProperties.FormattedValue = _fValue.ToString(); } break; } }
internal AllowDisplayMemberArgs(ICubeAddress address, Member member, bool isTotal) { Address = address.Clone(); Member = member; IsTotal = isTotal; }
/// <summary> /// Retrieves the source data that was used to create a specified cell in a cube /// </summary> /// <param name="Address"></param> /// <param name="AdataSet"></param> /// <param name="RowsToFetch"></param> public override void Drillthrough(ICubeAddress Address, DataTable AdataSet, int RowsToFetch, ICollection <string> columns) { ((MOlapCube)FCube).EnsureConnected(); var sb = new StringBuilder("DRILLTHROUGH "); if (RowsToFetch > 0) { sb.Append("MAXROWS "); sb.Append(RowsToFetch); } sb.Append(" SELECT {"); sb.Append(Address.Measure.UniqueName); sb.Append("} on 0"); for (var i = 0; i < Address.LevelsCount; i++) { sb.Append(", {"); var m = Address.Members(i); if (m.Filtered) { bool single; string set; ((MOlapCube)FCube).CreateVisibleSet(m.FLevel.FHierarchy, out single, out set, m, false); if (!single) { throw new Exception(string.Format(RadarUtils.GetResStr("rsMuitifilterDrillthroughError"), m.FLevel.FHierarchy.DisplayName)); } sb.Append(set); } else { sb.Append(Address.Members(i).UniqueName); } sb.Append("} on "); sb.Append(i + 1); } var j = Address.LevelsCount; for (var i = 0; i < FGrid.FFilteredHierarchies.Count; i++) { if (Address.GetMemberByHierarchy(FGrid.FFilteredHierarchies[i]) != null) { continue; } bool single; string set; ((MOlapCube)FCube).CreateVisibleSet(FGrid.FFilteredHierarchies[i], out single, out set, new HashSet <Member>(), false); if (!single) { throw new Exception( string.Format(RadarUtils.GetResStr("rsMuitifilterDrillthroughError"), FGrid.FFilteredHierarchies[i].DisplayName)); } sb.Append(", {"); sb.Append(set); sb.Append("} on "); sb.Append(++j); } sb.Append(" FROM "); sb.Append(((MOlapCube)FCube).ApplySubcubeFilter()); if (columns != null && columns.Count > 0) { sb.Append(" RETURN "); var b = false; foreach (var s in columns) { if (b) { sb.Append(", "); } else { b = true; } sb.Append(s); } } Drillthrough(AdataSet, sb.ToString()); }
internal virtual bool GetValueForSort(CellsetMember x, ICubeAddress y, List <Member> fColMembers, List <Member> fRowMembers, out object Value) { var a = x.GetAddress(); a.Merge(y); var b = GetCellValue(a, out Value); if (!b) { return(false); } var sm = a.MeasureMode; if (sm == null || IsNativeDataPresent(sm)) { return(b); } switch (sm.Mode) { case MeasureShowModeType.smPercentParentColItem: x = x.FParent; if (x == null) { return(true); } a = x.GetAddress(); a.Merge(y); object V; var b1 = GetCellValue(a, out V); if (!b1) { return(b); } try { Value = Convert.ToDouble(Value) / Convert.ToDouble(V); } catch { ; } break; case MeasureShowModeType.smPercentColTotal: a = x.GetAddress(); if (y.Measure != null) { a.Measure = y.Measure; a.MeasureMode = y.MeasureMode; } b1 = GetCellValue(a, out V); if (!b1) { return(b); } try { Value = Convert.ToDouble(Value) / Convert.ToDouble(V); } catch { ; } break; case MeasureShowModeType.smColumnRank: if (!(Value is IComparable)) { return(true); } if (a.Measure == null) { return(true); } a.MeasureMode = a.Measure.ShowModes[0]; var Rank = 1; var cmp = Value as IComparable; foreach (var m in fColMembers) { if (m == null) { continue; } try { a.AddMember(m); object vv; if (GetCellValue(a, out vv)) { if (cmp.CompareTo(vv) < 0) { Rank++; } } } catch { ; } } Value = Rank; break; case MeasureShowModeType.smRowRank: try { Value = -Convert.ToDouble(Value); } catch { ; } break; case MeasureShowModeType.smSpecifiedByEvent: if (!Grid.EventShowMeasureAssigned) { throw new Exception(string.Format(RadarUtils.GetResStr("rssmError"), a.Measure.DisplayName, sm.Caption)); } var E = new ShowMeasureArgs(Value, sm, null); E.fRowSiblings = fRowMembers; E.fColumnSiblings = fColMembers; E.fEvaluator = new Evaluator(Grid, a); Grid.EventShowMeasure(E); Value = E.ReturnData; break; } return(b); }
internal virtual object DoCalculateExpression(OlapControl Grid, ICubeAddress Address, Evaluator context) { return(null); }
internal override IEnumerable <Member> GetMembersList(ICubeAddress a, Members MembersList) { Dictionary <long, MembersListStorage> sd = null; if (fSortedData == null) { long cnt = 1; for (var i = 0; i < a.LevelsCount; i++) { cnt *= a.Levels(i).CompleteMembersCount; } if (cnt <= 300) { return(MembersList.ToArray()); } fSortedData = new Dictionary <string, Dictionary <long, MembersListStorage> >(); } CheckLineAlive(); //return MembersList.ToArray(); var sb = new StringBuilder(); for (var i = 0; i < a.LevelsCount; i++) { var l = a.Levels(i); if (l != MembersList[0].Level) { sb.Append(l.ID + "|"); } } var lkey = sb.ToString(); if (!fSortedData.TryGetValue(lkey, out sd)) { sd = new Dictionary <long, MembersListStorage>(); fSortedData.Add(lkey, sd); } var muls = new long[a.LevelsCount]; long multiplier = 1; long sdkey = 0; for (var i = 0; i < a.LevelsCount; i++) { var l = a.Levels(i); if (l != MembersList[0].Level) { sdkey += a.Members(i).ID *multiplier; muls[i] = multiplier; multiplier *= l.CompleteMembersCount; } else { muls[i] = -1; } } if (sd.Count == 0) { for (var i = 0; i < fIndexes.Length; i++) { var mm = fM.DecodeLineIdx(fIndexes[i]); long ckey = 0; var id = -1; for (var j = 0; j < a.LevelsCount; j++) { if (muls[j] > 0) { ckey += mm[j] * muls[j]; } else { id = mm[j]; } } MembersListStorage ss; if (!sd.TryGetValue(ckey, out ss)) { ss = new MembersListStorage(); sd.Add(ckey, ss); } ss.ids.Add(id); } } MembersListStorage mms = null; if (!sd.TryGetValue(sdkey, out mms)) { return(new List <Member>()); } return(mms.GetList(MembersList[0].Level)); }