예제 #1
0
        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);
        }