public JsonResult GerarDadosGraficoMetricas(MetricChartParameterViewModel paramsMetricChart) { string sql = @"select c.Name as NomePais, AVG(e.Value) as media, STDEVP(e.Value) as DesvioPadrao, MIN(e.Value) as Minimo, MAX(e.Value) as Maximo from EnergyUsageDatas e join countries c on c.CountryId = e.CountryId where e.Year >= @IdAnoInicio and e.Year <= @IdAnoFim and c.CountryId in @listaIdPaises and e.Value > 0 group by c.Name order by c.Name"; using (db) { var relatorioMetricas = db.Database.Connection.Query <RelatorioMetricasViewModels>(sql, param: new { IdAnoInicio = paramsMetricChart.AnoInicial, IdAnoFim = paramsMetricChart.AnoFinal, listaIdPaises = paramsMetricChart.ListaIdPaises } ); return(Json(relatorioMetricas)); } }
/// <summary> /// Gerar gráfico de metricas com Média, Desvio Padrão, Mínimo e Máximo de 4 países aleatórios. /// Após carregar o gráfico com os países aleatórios o usuários pode configurar os filtros e período como preferir. /// </summary> /// <returns>Retorna a view com o gráfico com os países selecionados aleatóriamente.</returns> public ActionResult GerarGraficoMetricas() { MetricChartParameterViewModel metricChartData = new MetricChartParameterViewModel(); metricChartData.AnoInicial = 1990; metricChartData.AnoFinal = 2005; using (db) { var paises = db.Countries.ToList(); metricChartData.ListaPaises = paises.OrderBy(o => o.Name).Select(x => new SelectListItem() { Value = x.CountryId.ToString(), Text = x.Name }); string sql = @"select TOP(4) c.Name as NomePais, AVG(e.Value) as media, STDEVP(e.Value) as DesvioPadrao, MIN(e.Value) as Minimo, MAX(e.Value) as Maximo from EnergyUsageDatas e join countries c on c.CountryId = e.CountryId where e.Year >= @IdAnoInicio and e.Year <= @IdAnoFim and c.CountryId in @listaIdPaises and e.Value > 0 group by c.Name order by NEWID()"; ViewBag.StartChart = db.Database.Connection.Query <RelatorioMetricasViewModels>(sql, param: new { IdAnoInicio = metricChartData.AnoInicial, IdAnoFim = metricChartData.AnoFinal, listaIdPaises = paises.Select(s => s.CountryId).ToArray() } ); return(View(metricChartData)); } }