private void AddLinkDimensionMeasureGroup(CbMeasure_M aCbMeasure, CbMeasureGroup_M aCbMeasureGroup) { try { CbDimension_M aCbDimension = aCbMeasure.ReferenceToDimension; RegularMeasureGroupDimension objRegMGDim = new RegularMeasureGroupDimension(); MeasureGroupAttribute objMGA = new MeasureGroupAttribute(); objRegMGDim = aCbMeasureGroup.MeasureGroupObj.Dimensions.Add(aCbDimension.CubeDimensionObj.ID); //Link TableKey in DimensionTable with TableKey in FactTable Measure Group objMGA = objRegMGDim.Attributes.Add(aCbDimension.DimensionObj.KeyAttribute.ID); objMGA.Type = MeasureGroupAttributeType.Granularity; objMGA.KeyColumns.Add( CreateDataItem(aCbMeasureGroup.ReferenceToDsDwTableMap.DwTableName, aCbMeasure.ReferenceToDsDwColumnMap.DwColumn.Name, NullProcessing.UnknownMember, aCbMeasure.ReferenceToDsDwColumnMap.DwColumn.DataType)); } catch (Exception ex) { AppendLogLine("Error in creating link between measure group and dimension. Error Message -> " + ex.Message); throw; } }
public void SyncToDsDwMap(DsDwMap_M aDsDwMap, bool aReload) { ReferenceToDsDwMap = aDsDwMap; if (aReload) { MeasureGroupList.AList.Clear(); DimensionList.AList.Clear(); } if (aDsDwMap != null) { foreach (DsDwTableMap_M aDsDwTableMap in aDsDwMap.DsDwTableMapList.Where(tm => tm != null)) { CbMeasureGroup_M aCbMeasureGroup = MeasureGroupList.AList.FirstOrDefault(mg => mg.ReferenceToDsDwTableMapGuid == aDsDwTableMap.MyGuid); if (aCbMeasureGroup != null) { aCbMeasureGroup.ReferenceToDsDwTableMap = aDsDwTableMap; } else { aCbMeasureGroup = new CbMeasureGroup_M { Name = aDsDwTableMap.DwSchemaTableName.Replace("dbo.", "").Replace(".", ""), ReferenceToDsDwTableMap = aDsDwTableMap }; MeasureGroupList.AList.Add(aCbMeasureGroup); } CbDimension_M aCbDimension = DimensionList.AList.FirstOrDefault(mg => mg.ReferenceToDsDwTableMapGuid == aDsDwTableMap.MyGuid); if (aCbDimension != null) { aCbDimension.ReferenceToDsDwTableMap = aDsDwTableMap; } else { aCbDimension = new CbDimension_M { Name = aDsDwTableMap.DwSchemaTableName.Replace("dbo.", "").Replace(".", ""), ReferenceToDsDwTableMap = aDsDwTableMap }; DimensionList.AList.Add(aCbDimension); } aCbMeasureGroup.FactDimension = aCbDimension; if (aDsDwTableMap.DsDwColumnMapList != null) { foreach (DsDwColumnMap_M aDsDwColumnMap in aDsDwTableMap.DsDwColumnMapList.Where(cm => cm != null && cm.Include)) { CbMeasure_M aCbMeasure = aCbMeasureGroup.MeasureList.FirstOrDefault(mg => mg.ReferenceToDsDwColumnMapGuid == aDsDwColumnMap.MyGuid); if (aCbMeasure != null) { aCbMeasure.ReferenceToDsDwColumnMap = aDsDwColumnMap; } else { aCbMeasure = new CbMeasure_M { Name = aDsDwColumnMap.DwColumn.Name, ReferenceToDsDwColumnMap = aDsDwColumnMap }; aCbMeasureGroup.MeasureList.Add(aCbMeasure); aCbMeasure.UpdateProperties(); } CbDimensionAttribute_M aCbDimensionAttribute = aCbDimension.AttributeList.FirstOrDefault(mg => mg.ReferenceToDsDwColumnMapGuid == aDsDwColumnMap.MyGuid); if (aCbDimensionAttribute != null) { aCbDimensionAttribute.ReferenceToDsDwColumnMap = aDsDwColumnMap; } else { aCbDimensionAttribute = new CbDimensionAttribute_M { Name = aDsDwColumnMap.DwColumn.Name, ReferenceToDsDwColumnMap = aDsDwColumnMap }; aCbDimension.AttributeList.Add(aCbDimensionAttribute); aCbDimensionAttribute.UpdateProperties(); } } aCbMeasureGroup.MeasureList.RemoveAll(m => m == null || m.ReferenceToDsDwColumnMap == null); aCbDimension.AttributeList.RemoveAll(a => a == null || a.ReferenceToDsDwColumnMap == null); } } MeasureGroupList.AList.RemoveAll(mg => mg == null || mg.ReferenceToDsDwTableMap == null); DimensionList.AList.RemoveAll(d => d == null || d.ReferenceToDsDwTableMap == null); //fix ReferenceToDimension links //SerializableObject.FixAllReferences(); foreach (CbMeasureGroup_M aCbMeasureGroup in MeasureGroupList.AList) { foreach (CbMeasure_M aCbMeasure in aCbMeasureGroup.MeasureList.Where(m => m != null && m.ReferenceToDsDwColumnMap != null)) { if (aCbMeasure.ReferenceToDsDwColumnMap.Transformation == DsDwColumnTransformation.ForeignKey) { aCbMeasure.ReferenceToDimension = DimensionList.AList.FirstOrDefault( dm => dm.ReferenceToDsDwTableMap == aCbMeasure.ReferenceToDsDwColumnMap.DwForeignKeyReferencedTableMap); } else { aCbMeasure.ReferenceToDimension = null; } } } } }