Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #8
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);
        }
Beispiel #9
0
 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]));
     }
 }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        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();
        }
Beispiel #13
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);
                    }
                }
            }
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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));
        }
Beispiel #17
0
        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);
Beispiel #19
0
 /// <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);
Beispiel #20
0
 /// <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());
                        }
                    }
                }
            }
        }
Beispiel #22
0
 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);
 }
Beispiel #24
0
        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));
        }
Beispiel #25
0
        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());
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
 internal virtual object DoCalculateExpression(OlapControl Grid, ICubeAddress Address, Evaluator context)
 {
     return(null);
 }
Beispiel #30
0
        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));
        }