示例#1
0
        public ClusteredReportResults GetClusteredResults()
        {
            var clusterResults = GetClusterDataSetResults();
            CaptionedDendrogramData rowDendrogramData = null;

            if (clusterResults.RowDendrogram != null)
            {
                var captionLevels = new List <CaptionedValues>();
                foreach (var headerLevel in RowHeaderLevels)
                {
                    captionLevels.Add(GetRowHeaderLevel(clusterResults.DataSet.RowLabels, headerLevel));
                }
                rowDendrogramData = new CaptionedDendrogramData(clusterResults.RowDendrogram, captionLevels);
            }

            List <CaptionedDendrogramData> columnDendrograms = new List <CaptionedDendrogramData>();
            int iResultGroup = 1;

            Debug.Assert(iResultGroup + Properties.PivotedProperties.SeriesGroups.Count == clusterResults.DataSet.DataFrameGroups.Count);
            foreach (var group in Properties.PivotedProperties.SeriesGroups)
            {
                var columnDendrogramData = clusterResults.ColumnGroupDendrograms[iResultGroup];
                CaptionedDendrogramData captionedDendrogramData = null;
                if (columnDendrogramData != null)
                {
                    var captionLevels = new List <CaptionedValues>();
                    foreach (var headerLevel in Properties.GetColumnHeaders(group))
                    {
                        captionLevels.Add(GetColumnHeaderLevel(clusterResults.DataSet.RowLabels, headerLevel));
                    }

                    if (captionLevels.Count == 0)
                    {
                        captionLevels.Add(GetDefaultColumnHeader(clusterResults.DataSet.RowLabels, group));
                    }
                    captionedDendrogramData = new CaptionedDendrogramData(columnDendrogramData, captionLevels);
                }
                columnDendrograms.Add(captionedDendrogramData);
                iResultGroup++;
            }

            if (columnDendrograms.All(v => null == v))
            {
                columnDendrograms = null;
            }
            var pivotedProperties = Properties.PivotedProperties.ReorderPivots(clusterResults.DataSet.DataFrameGroups
                                                                               .Skip(1)
                                                                               .Select(group => group.FirstOrDefault()?.ColumnHeaders).Cast <IList <int> >().ToList());

            pivotedProperties = pivotedProperties.ReorderItemProperties();
            return(new ClusteredReportResults(clusterResults.DataSet.RowLabels, Properties.ReplacePivotedProperties(pivotedProperties), rowDendrogramData, columnDendrograms));
        }
示例#2
0
        public ClusteredReportResults(IEnumerable <RowItem> rowItems, ClusteredProperties clusteredProperties,
                                      CaptionedDendrogramData rowDendrogramData, IEnumerable <CaptionedDendrogramData> columnDendrogramDatas)
            : base(rowItems, clusteredProperties.PivotedProperties.ItemProperties)
        {
            if (rowDendrogramData != null && rowDendrogramData.DendrogramData.LeafCount != RowItems.Count)
            {
                throw new ArgumentException(@"Row count does not match", nameof(rowDendrogramData));
            }

            RowDendrogramData = rowDendrogramData;

            ClusteredProperties = clusteredProperties;
            var colDendrograms = ImmutableList.ValueOf(columnDendrogramDatas);

            if (colDendrograms != null)
            {
                if (colDendrograms.Count != clusteredProperties.PivotedProperties.SeriesGroups.Count)
                {
                    throw new ArgumentException(@"Number of groups does not match", nameof(colDendrograms));
                }

                for (int i = 0; i < colDendrograms.Count; i++)
                {
                    var dendrogram = colDendrograms[i];
                    if (dendrogram != null && clusteredProperties.PivotedProperties.SeriesGroups[i].PivotKeys.Count != dendrogram.LeafCount)
                    {
                        throw new ArgumentException(@"Wrong number of columns", nameof(colDendrograms));
                    }
                }

                if (colDendrograms.Any(d => null != d))
                {
                    ColumnGroupDendrogramDatas = colDendrograms;
                }
            }
        }