コード例 #1
0
ファイル: Program.cs プロジェクト: DasariVaraPrasad/Samples
        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);
        }