コード例 #1
0
        private void AddFactLinkDimensionMeasureGroup(CbDimension_M aCbDimension, CbMeasureGroup_M aCbMeasureGroup)
        {
            try
            {
                DegenerateMeasureGroupDimension objMGFactDim = new DegenerateMeasureGroupDimension();
                objMGFactDim.CubeDimensionID = aCbDimension.CubeDimensionObj.ID;
                aCbMeasureGroup.MeasureGroupObj.Dimensions.Add(objMGFactDim);

                MeasureGroupAttribute objMGA = new MeasureGroupAttribute();

                //Link TableKey in DimensionTable with TableKey in FactTable Measure Group
                objMGA      = objMGFactDim.Attributes.Add(aCbDimension.DimensionObj.KeyAttribute.ID);
                objMGA.Type = MeasureGroupAttributeType.Granularity;
                objMGA.KeyColumns.Add(
                    CreateDataItem(aCbMeasureGroup.ReferenceToDsDwTableMap.DwTableName,
                                   aCbMeasureGroup.KeyName,
                                   NullProcessing.UnknownMember,
                                   null));
            }
            catch (Exception ex)
            {
                AppendLogLine("Error in creating fact link between measure group and dimension. Error Message -> " + ex.Message);
                throw;
            }
        }
コード例 #2
0
        public static List <DimensionUsage> GetDimensionUsage(Cube c)
        {
            List <CubeDimension> listCubeDimensions = new List <CubeDimension>();

            foreach (CubeDimension cd in c.Dimensions)
            {
                listCubeDimensions.Add(cd);
            }

            List <DimensionUsage> dimUsage = new List <DimensionUsage>();

            foreach (MeasureGroup mg in c.MeasureGroups)
            {
                System.Diagnostics.Trace.Write("mg " + mg.Name);
                foreach (MeasureGroupDimension mgdim in mg.Dimensions)
                {
                    System.Diagnostics.Trace.Write(",mgdim " + mgdim.Dimension.Name);
                    if (mgdim is ReferenceMeasureGroupDimension)
                    {
                        ReferenceMeasureGroupDimension refMgDim = (ReferenceMeasureGroupDimension)mgdim;
                        getReferencedMeasureGroupAttributeUsage(dimUsage, mg, refMgDim);
                    }
                    else if (mgdim is DegenerateMeasureGroupDimension)
                    {
                        DegenerateMeasureGroupDimension degMgDim = (DegenerateMeasureGroupDimension)mgdim;
                        getFactMeasureGroupAttributeUsage(dimUsage, mg, degMgDim);
                    }
                    else if (mgdim is ManyToManyMeasureGroupDimension)
                    {
                        ManyToManyMeasureGroupDimension m2mMgDim = (ManyToManyMeasureGroupDimension)mgdim;
                        getManyToManyMeasureGroupAttributeUsage(dimUsage, mg, m2mMgDim);
                    }
                    else if (mgdim is DataMiningMeasureGroupDimension)
                    {
                        DataMiningMeasureGroupDimension dmMgDim = (DataMiningMeasureGroupDimension)mgdim;
                        getDataMiningMeasureGroupAttributeUsage(dimUsage, mg, dmMgDim);
                    }
                    else if (mgdim is RegularMeasureGroupDimension)
                    {
                        RegularMeasureGroupDimension regMDdim = (RegularMeasureGroupDimension)mgdim;
                        getRegularMeasureGroupAttributeUsage(dimUsage, mg, regMDdim);
                    }
                    if (listCubeDimensions.Contains(mgdim.CubeDimension))
                    {
                        listCubeDimensions.Remove(mgdim.CubeDimension);
                    }
                }
            }

            //add any cube dimensions which aren't related to any measure groups
            foreach (CubeDimension cd in listCubeDimensions)
            {
                DimensionUsage du = new DimensionUsage(string.Empty, null, cd, cd.Dimension);
                dimUsage.Add(du);
            }

            return(dimUsage);
        }
コード例 #3
0
        /// <summary>
        /// Add fact dim usage
        /// </summary>
        /// <param name="measureGroup"></param>
        /// <param name="GranularityAttrID"></param>
        /// <param name="DimID"></param>
        internal static void ADD_DIM_USAGE_FACT_RELATIONSHIP(
            MeasureGroup measureGroup,
            String GranularityAttrID,
            String DimID)
        {
            DegenerateMeasureGroupDimension factMgDim = new DegenerateMeasureGroupDimension();

            factMgDim.CubeDimensionID = DimID;
            MeasureGroupAttribute mgAttr = factMgDim.Attributes.Add(GranularityAttrID);

            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            measureGroup.Dimensions.Add(factMgDim);
        }
コード例 #4
0
        private MeasureGroup GetMeasureGroup(Cube cube, Entity entity, string id, string dataSourceViewId)
        {
            MeasureGroup measureGroup;

            if (cube.MeasureGroups.Contains(id))
            {
                measureGroup = cube.MeasureGroups.Find(id);
            }
            else
            {
                measureGroup             = cube.MeasureGroups.Add(id);
                measureGroup.StorageMode = StorageMode.Molap;
            }
            Partition partition;

            if (measureGroup.Partitions.Contains(id))
            {
                partition = measureGroup.Partitions.Find(id);
            }
            else
            {
                partition = measureGroup.Partitions.Add(id);
            }
            partition.Source      = new DsvTableBinding(dataSourceViewId, entity.Alias);
            partition.StorageMode = StorageMode.Molap;

            measureGroup.Dimensions.Clear();
            var measureGroupDimension = new DegenerateMeasureGroupDimension(entity.Alias);

            foreach (var key in entity.GetPrimaryKey())
            {
                var attribute = measureGroupDimension.Attributes.Add(key.Alias);
                attribute.Type = MeasureGroupAttributeType.Granularity;
                attribute.KeyColumns.Add(entity.Alias, key.Alias, SSAS.GetOleDbType(key));
            }
            measureGroup.Dimensions.Add(measureGroupDimension);

            return(measureGroup);
        }
コード例 #5
0
        /*
         * Fact    Col1 - Granularity Attribute
         *         Col2 - Source Table name
         */
        private static void getFactMeasureGroupAttributeUsage(List <DimensionUsage> dimUsage, MeasureGroup mg, DegenerateMeasureGroupDimension factMGdim)
        {
            DimensionUsage usage = null;

            usage             = new DimensionUsage("Fact", mg, factMGdim.CubeDimension, factMGdim.Dimension);
            usage.Column1Name = "Granularity Attribute";
            usage.Column2Name = "Source Table";

            foreach (MeasureGroupAttribute mga in factMGdim.Attributes)
            {
                //mga.
                if (mga.Type == MeasureGroupAttributeType.Granularity)
                {
                    usage.Column1Value = mga.Attribute.Name;
                    foreach (DataItem di in mga.KeyColumns)
                    {
                        if (di.Source is ColumnBinding)
                        {
                            usage.Column2Value = ((ColumnBinding)di.Source).TableID;
                            DataSourceView dsv = mga.ParentCube.DataSourceView;

                            if (dsv.Schema.Tables.Contains(usage.Column2Value))
                            {
                                DataTable oTable = dsv.Schema.Tables[dsv.Schema.Tables.IndexOf(usage.Column2Value)];
                                if (oTable.ExtendedProperties.ContainsKey("FriendlyName"))
                                {
                                    usage.Column2Value = oTable.ExtendedProperties["FriendlyName"].ToString();
                                }
                            }
                        }
                    }
                }
            }
            dimUsage.Add(usage);
        }
コード例 #6
0
        /*
         * Fact    Col1 - Granularity Attribute
         *         Col2 - Source Table name
         */
        private static void getFactMeasureGroupAttributeUsage(List<DimensionUsage> dimUsage, MeasureGroup mg, DegenerateMeasureGroupDimension factMGdim)
        {
            DimensionUsage usage = null;
            usage = new DimensionUsage("Fact", mg, factMGdim.CubeDimension, factMGdim.Dimension);
            usage.Column1Name = "Granularity Attribute";
            usage.Column2Name = "Source Table";
            
            foreach (MeasureGroupAttribute mga in factMGdim.Attributes)
            {
                //mga.
                if (mga.Type == MeasureGroupAttributeType.Granularity)
                {
                    
                    usage.Column1Value = mga.Attribute.Name;
                    foreach (DataItem di in mga.KeyColumns)
                    {
                        if (di.Source is ColumnBinding)
                        {
                            usage.Column2Value = ((ColumnBinding)di.Source).TableID;
                            DataSourceView dsv = mga.ParentCube.DataSourceView;

                            if (dsv.Schema.Tables.Contains(usage.Column2Value))
                            {
                                DataTable oTable = dsv.Schema.Tables[dsv.Schema.Tables.IndexOf(usage.Column2Value)];
                                if (oTable.ExtendedProperties.ContainsKey("FriendlyName"))
                                {
                                    usage.Column2Value = oTable.ExtendedProperties["FriendlyName"].ToString();
                                }
                            }
                        }
                    }
                }
            }
            dimUsage.Add(usage);
        }