public async Task Reports(IDialogContext context, LuisResult result) { var reportType = ""; var reportFilter = ""; var reportDate = ""; foreach (var v in result.Entities) { if (v.Type == "ReportType") { reportType = v.Entity; } if (v.Type == "ReportGrouping") { reportFilter = v.Entity; } if (v.Type == "builtin.datetime.date") { reportDate = v.Resolution.Values.First(); } } IList <string> startDates = new List <string>(); IList <string> endDates = new List <string>(); IList <string> metrics = new List <string>(); IList <string> dimensions = new List <string>(); // Parse Date: Get Year, and week. Regex r = new Regex(@"(^\d{4})-W(\d{1,2})"); var match = r.Match(reportDate); if (match.Success) { var dt = GetDateFromWeekNumberAndDayOfWeek(Convert.ToInt32(match.Groups[2].Value), 0); reportDate = dt.ToString("yyyy-MM-dd"); } // Format Request startDates.Add(setDate(reportDate)); endDates.Add(setDate("today")); if (reportFilter.Length > 0) { dimensions.Add(SetDimension(reportFilter)); } metrics.Add(SetMetric(reportType)); // Call the service var service = new AnalyticsService(startDates, endDates, dimensions, metrics, "130610833"); var reportResult = await service.GetReport(); // Save last report! context.UserData.SetValue <GetReportsResponse>("LastReport", reportResult); context.UserData.SetValue <string>("ReportFilter", reportFilter); context.UserData.SetValue <string>("ReportDate", reportDate); context.UserData.SetValue <string>("ReportType", reportType); // Report dimension? If so, show as a pie chart. if (reportFilter.Length > 0) { var analyticsResult = await service.CreateSeries(); var labels = ""; var series = ""; for (int i = 0; i < analyticsResult.Item1.Count; i++) { labels += analyticsResult.Item1[i] + ","; series += analyticsResult.Item2[i] + ","; } await CreateDynamicChart(context, labels, series); } else { await context.PostAsync(reportResult.Reports[0].Data.Rows[0].Metrics[0].Values[0]); } context.Wait(this.MessageReceived); }