You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Analytics 4维度获取失败求助:附可用指标代码

解决GA4 Analytics Reporting API V4维度无法获取的问题

你已经成功搞定了指标的获取,但维度功能没生效的核心原因很明确:你的请求里根本没添加维度参数——虽然printResults函数里写了处理维度的代码,但如果请求本身没指定要获取哪些维度,API自然不会返回维度数据。

我来帮你调整代码,让维度功能正常工作:

1. 修改getMetricReport函数,添加维度支持

首先更新这个函数,新增维度参数,并在请求中配置维度对象:

function initializeAnalytics() { 
    $sKeyFileLocation = get_stylesheet_directory() . '/service-account-credentials.json'; 
    $client = new Google_Client(); 
    $client->setApplicationName("stats.laybackcph.dk"); 
    $client->setAuthConfig($sKeyFileLocation); 
    $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']); 
    $analytics = new Google_Service_AnalyticsReporting($client); 
    return $analytics; 
} 

function getMetricReport($analytics, $iViewID, $aMetrics, $sStartDate, $sEndDate, $aDimensions = []) { 
    // 创建日期范围对象
    $dateRange = new Google_Service_AnalyticsReporting_DateRange(); 
    $dateRange->setStartDate($sStartDate); 
    $dateRange->setEndDate($sEndDate); 

    $aMetricResults = array(); 
    foreach($aMetrics as $sMetric => $sAlias) { 
        // 创建指标对象
        $metric = new Google_Service_AnalyticsReporting_Metric(); 
        $metric->setExpression($sMetric); 
        $metric->setAlias($sAlias); 

        // 处理维度:如果传入维度列表,生成对应的维度对象
        $dimensionObjects = [];
        if (!empty($aDimensions)) {
            foreach ($aDimensions as $dimensionName) {
                $dim = new Google_Service_AnalyticsReporting_Dimension();
                $dim->setName($dimensionName);
                $dimensionObjects[] = $dim;
            }
        }

        // 创建报表请求对象
        $request = new Google_Service_AnalyticsReporting_ReportRequest(); 
        $request->setViewId($iViewID); 
        $request->setDateRanges($dateRange); 
        $request->setMetrics(array($metric)); 
        // 把维度添加到请求中
        if (!empty($dimensionObjects)) {
            $request->setDimensions($dimensionObjects);
        }

        $body = new Google_Service_AnalyticsReporting_GetReportsRequest(); 
        $body->setReportRequests( array( $request) ); 
        $aMetricResults[$sAlias] = printResults($analytics->reports->batchGet($body)); 
    } 
    return $aMetricResults; 
} 

/** 
 * 解析并返回Analytics Reporting API V4的响应数据
 * 
 * @param  $reports Analytics Reporting API V4响应结果
 */ 
function printResults($reports) { 
    $aReport = array(); 
    for($reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++) { 
        $report = $reports[ $reportIndex ]; 
        $header = $report->getColumnHeader(); 
        $dimensionHeaders = $header->getDimensions(); 
        $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries(); 
        $rows = $report->getData()->getRows(); 
        
        if (!empty($rows)) {
            for($rowIndex = 0; $rowIndex < count($rows); $rowIndex++) { 
                $row = $rows[ $rowIndex ]; 
                $dimensions = $row->getDimensions(); 
                $metrics = $row->getMetrics(); 
                $rowData = [];
                
                // 填充维度数据
                for($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) { 
                    $rowData[$dimensionHeaders[$i]] = $dimensions[$i]; 
                } 
                // 填充指标数据
                for($j = 0; $j < count($metrics); $j++) { 
                    $values = $metrics[$j]->getValues(); 
                    for($k = 0; $k < count($values); $k++) { 
                        $entry = $metricHeaders[$k]; 
                        $rowData[$entry->getName()] = $values[$k]; 
                    } 
                }
                $aReport[] = $rowData;
            } 
        }
    } 
    return $aReport; 
}

2. 调用函数时传入维度参数

比如你想获取ga:country(国家)和ga:deviceCategory(设备类型)维度,调用方式示例:

// 初始化Analytics客户端
$analytics = initializeAnalytics();
// 替换成你的视图ID
$viewId = "123456789";
// 要获取的指标
$metrics = [
    "ga:sessions" => "总会话数",
    "ga:users" => "用户数"
];
// 要获取的维度
$dimensions = ["ga:country", "ga:deviceCategory"];
// 获取数据(时间范围最近7天到今天)
$results = getMetricReport($analytics, $viewId, $metrics, "7daysAgo", "today", $dimensions);

// 打印结果查看
print_r($results);

注意事项

  • 如果你使用的是GA4属性而非UA(Universal Analytics),维度命名会有区别,比如UA的ga:country在GA4中是country,需要对应调整维度名称。
  • 确保你的服务账号有权限访问对应的GA4/UA视图,并且维度和指标的组合是API支持的。

内容的提问来源于stack exchange,提问作者user9295119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:46