public DataSetItemModel GetDataSetItemModel(string id) { var item = _database.GetItem(id); var model = new DataSetItemModel(); if (item != null) { model.MaxKeysPerSegment = MainUtil.GetInt(item["Max Keys Per Segment"], DefaultMaxKeysPerSegment); model.TimeResolution = ReadTimeResolution(StringUtil.GetString(item["Time Resolution"], WeeklyTimeResolution)); var segmentsField = (MultilistField)item.Fields["Segments"]; if (segmentsField != null) { model.Segments.AddRange(segmentsField.TargetIDs); } else { Log.Warn($"[DataStudio] Could not load segments field from item '{item.Paths.Path}'", this); } } else { Log.Warn($"[DataStudio] Could not load data set item '{id}'", this); } return(model); }
private IEnumerable <object[]> GetSegmentData(GetDataPipelineArgs args, DataSetItemModel dataSet, ID segmentId) { using (new SecurityDisabler()) { var query = new ReportQuery { Segments = new[] { segmentId.ToString() }.ToList(), Keys = new[] { _decoder.Decode("all") }.ToList(), Fields = args.Request.Fields.ToList(), Parameters = { KeyTop = dataSet.MaxKeysPerSegment, KeyOrderBy = new FieldSort { Direction = SortDirection.Desc, Field = SortField.Visits }, DateFrom = args.Request.StartDate ?? DateTime.Now.AddDays(-30), DateTo = args.Request.EndDate ?? DateTime.Now, TimeResolution = dataSet.TimeResolution } }; var response = _encoder.Encode(_reportingService.RunQuery(query)); string TranslateKey(string fieldName, string value) => response.Data.Localization.Fields. SingleOrDefault(f => f.Field == fieldName)?.Translations[value]; var rows = response.Data.Content.Select(row => new object[] { TranslateKey("segment", row.Segment), row.DateLabel, row.Date?.ToString("yyyyMMdd"), TranslateKey("key", row.Key), row.Visits, row.Value, row.Conversions, row.TimeOnSite, row.PageViews, row.Bounces, row.Count, row.ValuePerVisit, row.BounceRate, row.AvgVisitDuration, row.ConversionRate, row.AvgVisitPageViews, row.AvgVisitCount, row.AvgPageCount, row.AvgCountValue }); return(rows); } }