bd4e97c5-84e7-4c61-80ca-8d53d7876af2 true D0001-SQL-11.sdt.local jazz dev master Prod true var config = (from c in Configurations where c.FiscalYearID == 2020 select c).First(); var opps = (from OBJ in QVILineItemOpportunities join qve in QualityVariationEvents on OBJ.QualityVariationEventID equals qve.QualityVariationEventID where OBJ.ConfigurationGUID == config.ConfigurationGUID && !OBJ.IsHidden select new { OBJ.OpportunityGUID, OBJ.InitiativeGUID, OBJ.Savings, // OBJ.DateModified, // OBJ.DateCreated, // OBJ.ConfigurationGUID, // OBJ.IsHidden, OBJ.TotalCasesWithQVI, OBJ.TotalPatientDaysWithQVI, OBJ.TotalCostWithQVI, OBJ.NetRevenueWithQVI, OBJ.BreakdownName, OBJ.BreakdownID, OBJ.CommittedSavingsLevel, OBJ.TotalCases, OBJ.Note, OBJ.QualityVariationEventID, QualityVariationEventName = qve.Name, QualityVariationEventCategory = qve.Category, qve.QVILineItemID, QVILineItemName = qve.Name, QVIName = qve.Category, qve.SortOrder, qve.ClinicalIndicatorID }).ToList(); opps .GroupBy(p => p.QualityVariationEventCategory, (category, qvi) => new { Name = category, Savings = qvi.Sum(x => x.Savings), Cases = qvi.Sum(x => x.TotalCasesWithQVI), SavingsMaxPotential = qvi.WeightedAverage(x => x.Savings.DivideBy(x.TotalCasesWithQVI), w => w.TotalCasesWithQVI), QVISubItems = qvi.ToList() }) .OrderByDescending(p => p.Cases) .ThenByDescending(p => p.Savings) .Dump();