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);
            }
        }