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