【问题标题】:Google Analytics API ruby client - multiple metricsGoogle Analytics API ruby​​ 客户端 - 多个指标
【发布时间】:2018-05-07 20:32:07
【问题描述】:

我正在使用 google API ruby​​ 客户端,我想实现一些更复杂的分析查询,例如本文档中的建议

https://developers.google.com/analytics/devguides/reporting/core/v3/common-queries

本文档建议指标可以作为多个指标的逗号分隔字符串提供,但 API 客户端仅接受表达式。

如何在单个查询中查询多个指标? ruby 客户端似乎只接受通常由单个指标组成的表达式,例如会话或浏览量,如下所示:

metric = Google::Apis::AnalyticsreportingV4::Metric.new(expression: 'ga:sessions')

如果我删除“表达式”并输入指标列表,我只会收到错误消息。

度量参数的值“ga:sessions;ga:pageviews”无效。

【问题讨论】:

    标签: ruby google-api google-api-client


    【解决方案1】:

    这是我的解决方案,以及报告 Google Analytics 数据的通用方法:

    此答案应与https://developers.google.com/drive/v3/web/quickstart/ruby一起阅读

    analytics = Google::Apis::AnalyticsreportingV4::AnalyticsReportingService.new
    analytics.client_options.application_name = APPLICATION_NAME
    analytics.authorization = authorize
    
    def get_analytics_data( analytics,
                            view_id,
                            start_date: (Date.today + 1 - Date.today.wday) - 6, 
                            end_date: (Date.today + 1 - Date.today.wday),
                            metrics: ['ga:sessions'],
                            dimensions: [], 
                            order_bys: [],
                            segments: nil, # array of hashes
                            filter: nil,
                            page_size: nil ) 
    
      get_reports_request_object = Google::Apis::AnalyticsreportingV4::GetReportsRequest.new
    
      report_request_object = Google::Apis::AnalyticsreportingV4::ReportRequest.new
    
      report_request_object.view_id = view_id
    
      analytics_date_range_object = Google::Apis::AnalyticsreportingV4::DateRange.new
      analytics_date_range_object.start_date = start_date
      analytics_date_range_object.end_date = end_date
    
      report_request_object.date_ranges = [analytics_date_range_object]
    
    #  report_request_metrics = []
    
      report_request_object.metrics = []
    
      metrics.each { |metric|
        analytics_metric_object = Google::Apis::AnalyticsreportingV4::Metric.new
        analytics_metric_object.expression = metric 
        report_request_object.metrics.push(analytics_metric_object) } 
    
    #  report_request_object.metrics = report_request_metrics
    
      unless dimensions.empty?
    
         report_request_object.dimensions = []
    
         dimensions.each { |dimension|
            analytics_dimension_object = Google::Apis::AnalyticsreportingV4::Dimension.new
            analytics_dimension_object.name = dimension
            report_request_object.dimensions.push(analytics_dimension_object) }
      end 
    
      unless segments.nil?
    
        report_request_object.segments = []
    
            analytics_segment_object = Google::Apis::AnalyticsreportingV4::Segment.new
            analytics_dynamic_segment_object = Google::Apis::AnalyticsreportingV4::DynamicSegment.new
            analytics_segment_definition_object = Google::Apis::AnalyticsreportingV4::SegmentDefinition.new
            analytics_segment_filter_object = Google::Apis::AnalyticsreportingV4::SegmentFilter.new
            analytics_simple_segment_object = Google::Apis::AnalyticsreportingV4::SimpleSegment.new
            analytics_or_filters_for_segment_object = Google::Apis::AnalyticsreportingV4::OrFiltersForSegment.new         
            analytics_segment_filter_clause_object = Google::Apis::AnalyticsreportingV4::SegmentFilterClause.new
            analytics_segment_metric_filter_object = Google::Apis::AnalyticsreportingV4::SegmentMetricFilter.new
    
            analytics_dimension_object = Google::Apis::AnalyticsreportingV4::Dimension.new
            analytics_dimension_object.name = 'ga:segment'
            report_request_object.dimensions.push(analytics_dimension_object)
    
            analytics_or_filters_for_segment_object.segment_filter_clauses = []
            analytics_simple_segment_object.or_filters_for_segment = []
            analytics_segment_definition_object.segment_filters = []
    
        segments.each { |segment|
    
            analytics_segment_metric_filter_object.metric_name = segment[:metric_name]
            analytics_segment_metric_filter_object.comparison_value = segment[:comparison_value]
            analytics_segment_metric_filter_object.operator = segment[:operator]
    
            analytics_segment_filter_clause_object.metric_filter = analytics_segment_metric_filter_object
    
            analytics_or_filters_for_segment_object.segment_filter_clauses.push(analytics_segment_filter_clause_object)
    
            analytics_simple_segment_object.or_filters_for_segment.push(analytics_or_filters_for_segment_object)
    
            analytics_segment_filter_object.simple_segment = analytics_simple_segment_object
    
            analytics_segment_definition_object.segment_filters.push(analytics_segment_filter_object)
    
            analytics_dynamic_segment_object.name = segment[:name]
            analytics_dynamic_segment_object.session_segment = analytics_segment_definition_object
    
            analytics_segment_object.dynamic_segment = analytics_dynamic_segment_object 
    
            report_request_object.segments.push(analytics_segment_object) } 
      end
    
    unless order_bys.empty?
    
     report_request_object.order_bys = []
    
     order_bys.each { |orderby|
        analytics_orderby_object = Google::Apis::AnalyticsreportingV4::OrderBy.new
        analytics_orderby_object.field_name = orderby
        analytics_orderby_object.sort_order = 'DESCENDING'
        report_request_object.order_bys.push(analytics_orderby_object)}
    end
    
    unless filter.nil?
      report_request_object.filters_expression = filter
    end
    
    unless page_size.nil?
       report_request_object.page_size = page_size 
    end
    
    get_reports_request_object.report_requests = [report_request_object]  
    
    response = analytics.batch_get_reports(get_reports_request_object)
    end
    

    如果使用维度,您可以像这样报告数据:

    response = get_analytics_data(analytics, VIEW_ID, metrics: ['ga:pageviews'], dimensions: ['ga:pagePath'], order_bys: ['ga:pageviews'], page_size: 25)
    
    response.reports.first.data.rows.each do |row|
      puts row.dimensions
      puts row.metrics.first.values.first.to_i
      puts
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      相关资源
      最近更新 更多