public ConcurrentAnalysisModel GetConcurrentAnalysis(int projectId, IList <int> concurrentIds, DateRange dateRange) { IDictionary <int, IList <long> > usersIntersection; DashboardMetrics initialMetrics = this.metricsService.GetDashboardMetrics(projectId, dateRange); RankedModel initialRankedModel = RankedModel.Create(initialMetrics); IList <DashboardMetrics> concurrentsMetrics = new List <DashboardMetrics>(); IList <RankedModel> concurrentsRankedMetrics = new List <RankedModel>(); foreach (var concurrentId in concurrentIds) { var concurrentMetrics = this.metricsService.GetDashboardMetrics(concurrentId, dateRange); var rankedModel = RankedModel.Create(concurrentMetrics); concurrentsMetrics.Add(concurrentMetrics); concurrentsRankedMetrics.Add(rankedModel); } using (this.unitOfWorkProvider.CreateUnitOfWork()) { usersIntersection = this.usersCalculator.FindUsersIntersection(initialMetrics.AllUserIds, concurrentsMetrics.ToDictionary(c => c.Project.Id, v => v.AllUserIds)); } this.AssignUsersIntersection(concurrentsRankedMetrics, usersIntersection); this.RankModels(initialRankedModel, concurrentsRankedMetrics); var result = new ConcurrentAnalysisModel(initialRankedModel, concurrentsRankedMetrics); return(result); }
public IList <UiTableColumn> CreateCompareGroupsModel(ConcurrentAnalysisModel analysis) { IList <UiTableColumn> result = new List <UiTableColumn>(); var valueColumn = GetLabelsColumn(); result.Add(valueColumn); var targetColumn = this.GetColumn(analysis.BaseMetrics); result.Add(targetColumn); foreach (var comparativeModel in analysis.Comparisons) { var groupColumn = this.GetColumn(comparativeModel); result.Add(groupColumn); } return(result); }