public void TestGetMember() { HfmSession hfmSession = HfmHelper.CreateHfmSession(); HfmDimension hfmDimension = hfmSession.GetDimension(); var ret = hfmDimension.EnumMembers2(HfmDimensionType.Account); for (int index = 0; index < ret.Count && index < 20; index++) { DimensionMember member = ret[index]; int id = hfmDimension.GetMemberID(HfmDimensionType.Account, member.MemberLabel); Assert.AreEqual(id, member.MemberID); string label = hfmDimension.GetMemberLabel(HfmDimensionType.Account, member.MemberID); Assert.AreEqual(label, member.MemberLabel); } }
public List <DimensionMember> EnumMembers2(HfmDimensionType argDimensionType, string argMemberListName) { object count = null, varMemberIDs = null, varParentIDs = null, valMemberLabels = null, varDescriptions = null, varNumChildren = null, varTotalMembersInEnum = null; HFMwDimension hfmwDimension = HfmDimensionTypeHelper.GetHFMwDimension(_HFMwSession, argDimensionType); count = hfmwDimension.EnumMembers2(tagPOVDEFAULTS.MEMBERNOTUSED, tagPOVDEFAULTS.MEMBERNOTUSED, tagPOVDEFAULTS.MEMBERNOTUSED, tagPOVDEFAULTS.MEMBERNOTUSED, argMemberListName, "", 0, 0, (int)tagWEBOM_METADATA_INFO_FLAGS.WEBOM_METADATA_INFO_ALL, ref varMemberIDs, ref varParentIDs, ref valMemberLabels, ref varDescriptions, ref varNumChildren, ref varTotalMembersInEnum); int total = (int)varTotalMembersInEnum; List <DimensionMember> retList = new List <DimensionMember>(); for (int i = 0; i < total; i++) { DimensionMember dimensionMember = new DimensionMember(); dimensionMember.MemberID = (int)((object[])varMemberIDs)[i]; if (varParentIDs != null) { dimensionMember.ParentID = (int)((object[])varParentIDs)[i]; } dimensionMember.NumChildren = (int)((object[])varNumChildren)[i]; dimensionMember.MemberLabel = ((object[])valMemberLabels)[i] as string; dimensionMember.Description = ((object[])varDescriptions)[i] as string; retList.Add(dimensionMember); } return(retList); }
static void Main(string[] args) { // Preparation of Meta Data MetaDataManager metaDataManager = new MetaDataManager(); List <Segment> segments = metaDataManager.GetSegments(); Dictionary <Segment, HierarchyMetaData> metaData = new Dictionary <Segment, HierarchyMetaData>(); foreach (Segment segment in segments) { metaData.Add(segment, new HierarchyMetaData(metaDataManager.GetHierarchyMembers(segment.Id))); } //List<TimeHierarchy> timeHierarchies = metaDataManager.GetTimeHierarchies(); //Utility.PopulateLRValues(timeHierarchies); List <DimensionSelection> selections = new List <DimensionSelection>() { new DimensionSelection() { SegmentID = 1, SelectedMembers = new List <int>() { 1 }, Option = ExtendedMemberOption.SelectedAndAllChildern }, new DimensionSelection() { SegmentID = 2, SelectedMembers = new List <int>() { 1 }, Option = ExtendedMemberOption.SelectedAndAllChildern } //,new DimensionSelection(){ SegmentID = 3, SelectedMembers = new List<int>(){ 1 }, Option = ExtendedMemberOption.SelectedAndAllChildern } //,new DimensionSelection(){ SegmentID = 4, SelectedMembers = new List<int>(){ 1 }, Option = ExtendedMemberOption.SelectedAndAllChildern } }; selections = metaDataManager.ApplyDefaultSegmentMemberIDs(segments, selections); List <GLRecord> lstGLRecord = metaDataManager.GetSourceData(); Dictionary <DimensionSelection, IAggregation <ExtendedHierarchyMember> > selectionAggregations = new Dictionary <DimensionSelection, IAggregation <ExtendedHierarchyMember> >(); foreach (DimensionSelection selection in selections) { AggregationFactory <ExtendedHierarchyMember> aggregationFactory = new AggregationFactory <ExtendedHierarchyMember>(selection.SelectedMembers, metaData[segments.FirstOrDefault(x => x.Id == selection.SegmentID)].Members.ToList()); IAggregation <ExtendedHierarchyMember> aggregation = aggregationFactory.Create(selection.Option); lstGLRecord.RemoveAll(x => !aggregation.RelevantLeafIDs.Contains(x.GLMembers.SegmentValues.FirstOrDefault(z => z.Key == selection.SegmentID).Value)); selectionAggregations.Add(selection, aggregation); } foreach (KeyValuePair <DimensionSelection, IAggregation <ExtendedHierarchyMember> > selectionAggregation in selectionAggregations) { DimensionAggregationFactory <ExtendedHierarchyMember, HierarchyMemberAncestor> dimensionAggregationFactory = new DimensionAggregationFactory <ExtendedHierarchyMember, HierarchyMemberAncestor>(selectionAggregation.Key.SegmentID, lstGLRecord, selectionAggregation.Value, metaData[segments.FirstOrDefault(x => x.Id == selectionAggregation.Key.SegmentID)].MemberAncestors.ToList()); switch (selectionAggregation.Key.Option) { case ExtendedMemberOption.Leaves: default: break; case ExtendedMemberOption.Selected: if (lstGLRecord.Select(x => x.GLMembers.SegmentValues.FirstOrDefault(z => z.Key == selectionAggregation.Key.SegmentID).Value).Except(selectionAggregation.Value.DisplayMembers.Select(x => x.Id)).Count() > 0) { foreach (ExtendedHierarchyMember extendedHierarchyMember in selectionAggregation.Value.DisplayMembers) { DimensionMember dimensionMember = new DimensionMember(extendedHierarchyMember); dimensionMember.Accept(dimensionAggregationFactory.Create(CompositionType.Part)); } } break; case ExtendedMemberOption.Children: case ExtendedMemberOption.AllChildren: case ExtendedMemberOption.SelectedAndChildren: case ExtendedMemberOption.SelectedAndAllChildern: case ExtendedMemberOption.SelectedAndLeaves: case ExtendedMemberOption.SelectedAndParents: int maxDepth = selectionAggregation.Value.DisplayMembers.Where(x => x.MemberType == MemberType.Rollup).Max(z => z.Level); int minDepth = selectionAggregation.Value.DisplayMembers.Where(x => x.MemberType == MemberType.Rollup).Min(z => z.Level); for (int level = maxDepth; level >= minDepth; level--) { foreach (ExtendedHierarchyMember extendedHierarchyMember in selectionAggregation.Value.DisplayMembers.Where(x => x.MemberType == MemberType.Rollup && x.Level == level)) { if (!selectionAggregation.Value.DisplayMembers.Any(x => x.MemberType == MemberType.Rollup && (x.ParentId == extendedHierarchyMember.Id))) { DimensionMember dimensionMember = new DimensionMember(extendedHierarchyMember); dimensionMember.Accept(dimensionAggregationFactory.Create(CompositionType.Part)); } else { DimensionWholePartHierarchy dimensionWholePartHierarchy = new DimensionWholePartHierarchy(selectionAggregation.Value.DisplayMembers.Where(x => x.ParentId == extendedHierarchyMember.Id || x.Id == extendedHierarchyMember.Id).ToList()); dimensionWholePartHierarchy.Accept(dimensionAggregationFactory.Create(CompositionType.Composite)); } } } break; } lstGLRecord.RemoveAll(x => selectionAggregation.Value.PostProcessDeleteMemberIDs.Contains(x.GLMembers.SegmentValues.FirstOrDefault(z => z.Key == selectionAggregation.Key.SegmentID).Value)); } Utility.Export(lstGLRecord, segments, metaData); }
private List <LogicalModel.Base.QualifiedItem> GetMembers(DimensionMember FilterMember) { var result = new List <Hierarchy <LogicalModel.Base.QualifiedItem> >(); var resultx = new List <LogicalModel.Base.QualifiedItem>(); var hierarchynode = Taxonomy.Hierarchies.FirstOrDefault(i => i.Item.Role == FilterMember.ArcRole); var membernode = hierarchynode.FirstOrDefault(i => i.Item.FullName == FilterMember.QName.Content); var axes = FilterMember.Axis.ToLower(); switch (axes) { case "ancestor": result = membernode.Parents(); break; case "ancestor-or-self": result = membernode.Parents(); result.Add(membernode); break; case "attribute": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "child": result = membernode.Children; break; case "descendant": result = membernode.Descendant(); break; case "descendant-or-self": result = membernode.All(); break; case "following": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "following-sibling": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "namespace": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "parent": result.Add(membernode.Parent); break; case "preceding": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "preceding-sibling": throw new NotImplementedException("Dimension Filter Member axis " + axes + " is not implemented!"); case "self": result.Add(membernode); break; default: Console.WriteLine("Default case"); break; } resultx = result.Select(i => i.Item).ToList(); return(resultx); }