public static async Task<List<TrackAnalysisData>> GetTrackAnalysisData(string requestType, string campaignId, string dimensions, string metrics, string startDate, string endDate, string maxResults)
        {
            TrackAnalysisRequest.Singleton.InitialRequest(TrackAnalysisReportResource.TrackAnalysisDataServer, User.UserToken.Access_Token);
            var requiredStartDate = startDate.Split(' ')[0];
            var requiredEndDate = endDate.Split(' ')[0];
            var trackAnalysisInfo = new TrackAnalysisInfo
            {
                StartDate = requiredStartDate,
                EndDate = requiredEndDate,
                Dimensions = dimensions,
                Metrics = metrics,
                MaxResults = maxResults
            };

            var data = await TrackAnalysisRequest.Singleton.GetTrackAnalysisData(requestType, campaignId, trackAnalysisInfo);
            if (dimensions.IndexOf("CampaignsName", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return data;
            }

            TrackAnalysisCompaignRequest.Singleton.InitialRequest(TrackAnalysisReportResource.TrackAnalysisDataClient, User.UserToken.Access_Token);
            var campaigns = await TrackAnalysisCompaignRequest.Singleton.GetCampaigns();

            var campaignName = campaigns[campaignId];
            foreach (var item in data)
            {
                item.Campaigns = campaignId;
                item.CampaignsName = campaignName;
            }

            
            return data;
        }
        public async Task<List<TrackAnalysisData>> GetTrackAnalysisData(string requestType, string campaignId, TrackAnalysisInfo info)
        {
            string requestUri = string.Format(TrackAnalysisReportResource.TrackAnalysisDataRequest, campaignId, requestType);
            var request = this.SetRequest(requestUri, info);

            var response = await this.client.ExecuteGetTaskAsync(request);
            if (!this.IsStatusCodeOK(response.StatusCode))
            {
                return new List<TrackAnalysisData>();
            }

            var data = JsonConvert.DeserializeObject<List<TrackAnalysisData>>(response.Content);

            return data;
        }
        private RestRequest SetRequest(string requestUri, TrackAnalysisInfo info)
        {
            var request = new RestRequest(requestUri, Method.GET);
            if (this.accessToken != null)
            {
                request.AddParameter("access_token", this.accessToken);
            }

            if (info == null)
            {
                return null;
            }

            var dimensions = this.FormatDimensions(info.Dimensions);

            var metrics = info.Metrics;
            if (requestUri.Contains("freqs"))
            {
                metrics = this.FormatFreqsMetrics(info.Metrics);
            }

            request.AddParameter("startDate", info.StartDate);
            request.AddParameter("endDate", info.EndDate);
            request.AddParameter("dimensions", dimensions);
            request.AddParameter("metrics", metrics);
            request.AddParameter("maxResults", info.MaxResults);
            request.AddParameter("startIndex", "0");

            if (info.GeoId != null)
            {
                //for igrp
                request.AddParameter("geo", info.GeoId);
            }

            if (info.SiteId != null)
            {
                //for integrate
                request.AddParameter("siteId", info.SiteId);
            }
            
            return request;
        }