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
相关产品推荐
相关产品推荐

