public static Clusterer CreateClusterer(CancellationToken cancellationToken, ClusteringSpec clusteringSpec, ReportResults reportResults) { var pivotedPropertySet = new PivotedProperties(reportResults.ItemProperties); pivotedPropertySet = pivotedPropertySet.ChangeSeriesGroups(pivotedPropertySet.CreateSeriesGroups()).ReorderItemProperties(); var clusteredProperties = ClusteredProperties.FromClusteringSpec(clusteringSpec, pivotedPropertySet); if (!clusteredProperties.RowValues.Any() && !clusteredProperties.ColumnValues.Any()) { clusteringSpec = ClusteringSpec.GetDefaultClusteringSpec(cancellationToken, reportResults, pivotedPropertySet); if (clusteringSpec == null) { return(null); } clusteredProperties = ClusteredProperties.FromClusteringSpec(clusteringSpec, pivotedPropertySet); } return(new Clusterer(cancellationToken, reportResults.RowItems, clusteredProperties, ClusterMetricType.FromName(clusteringSpec.DistanceMetric) ?? ClusterMetricType.DEFAULT)); }