如何在Google Analytics(分析)数据API中使用Google Apps脚本中的滤波器表达
我正在尝试使用新的Google Analytics Data API从GA4属性中获取一些非常简单的数据并进入电子表格。
这一切都很好。
但是,我现在想应用一些尺寸过滤器,以便它仅返回那些匹配过滤器的行。
这是我添加的代码,但我认为格式是错误的。
const dimensionfilter = AnalyticsData.newFilterExpression();
dimensionfilter.filter.fieldName = 'pageTitle';
dimensionfilter.filter.stringFilter.value = 'MYPAGETITLETEXT';
应用程序脚本中没有添加DimensionFilter等的示例,
有人做到了吗?有人有任何非常简单的例子吗?
非常感谢。
这是我的完整代码
function runReport() {
const propertyId = '29045017783';
try {
const metric = AnalyticsData.newMetric();
metric.name = 'screenPageViews';
const pagetitle = AnalyticsData.newDimension();
pagetitle.name = 'pageTitle';
const pagepath = AnalyticsData.newDimension();
pagepath.name = 'pagePath';
const dateRange = AnalyticsData.newDateRange();
dateRange.startDate = '2022-05-01';
dateRange.endDate = 'today';
const dimensionfilter = AnalyticsData.newFilterExpression();
dimensionfilter.filter.fieldName = 'pageTitle';
dimensionfilter.filter.stringFilter.value = 'MYPAGETITLETEXT';
const request = AnalyticsData.newRunReportRequest();
request.dimensions = [pagetitle, pagepath];
request.metrics = [metric];
request.dateRanges = dateRange;
request.limit=10;
request.dimensionFilter = dimensionfilter;
const report = AnalyticsData.Properties.runReport(request,'properties/' + propertyId);
if (!report.rows) {
Logger.log('No rows returned.');
return;
}
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
// Append the headers.
const dimensionHeaders = report.dimensionHeaders.map(
(dimensionHeader) => {
return dimensionHeader.name;
});
const metricHeaders = report.metricHeaders.map(
(metricHeader) => {
return metricHeader.name;
});
const headers = [...dimensionHeaders, ...metricHeaders];
sheet.appendRow(headers);
// Append the results.
const rows = report.rows.map((row) => {
const dimensionValues = row.dimensionValues.map(
(dimensionValue) => {
return dimensionValue.value;
});
const metricValues = row.metricValues.map(
(metricValues) => {
return metricValues.value;
});
return [...dimensionValues, ...metricValues];
});
sheet.getRange(2, 1, report.rows.length, headers.length)
.setValues(rows);
Logger.log('Report spreadsheet created: %s',
spreadsheet.getUrl());
} catch (e) {
// TODO (Developer) - Handle exception
Logger.log('Failed with error: %s', e.error);
}
}
I'm trying to use the new Google Analytics Data API to pull in some very simple data from our GA4 property and into a spreadsheet.
This all works great.
However I now want to apply some Dimension Filters so that It returns only those rows that match the filter.
This is the code I've added but I think the format is wrong.
const dimensionfilter = AnalyticsData.newFilterExpression();
dimensionfilter.filter.fieldName = 'pageTitle';
dimensionfilter.filter.stringFilter.value = 'MYPAGETITLETEXT';
There are no examples in Apps script for adding DimensionFilter etc
Has anyone done this? Has anyone got any very simple examples.
Many thanks in advance.
Here is my full code
function runReport() {
const propertyId = '29045017783';
try {
const metric = AnalyticsData.newMetric();
metric.name = 'screenPageViews';
const pagetitle = AnalyticsData.newDimension();
pagetitle.name = 'pageTitle';
const pagepath = AnalyticsData.newDimension();
pagepath.name = 'pagePath';
const dateRange = AnalyticsData.newDateRange();
dateRange.startDate = '2022-05-01';
dateRange.endDate = 'today';
const dimensionfilter = AnalyticsData.newFilterExpression();
dimensionfilter.filter.fieldName = 'pageTitle';
dimensionfilter.filter.stringFilter.value = 'MYPAGETITLETEXT';
const request = AnalyticsData.newRunReportRequest();
request.dimensions = [pagetitle, pagepath];
request.metrics = [metric];
request.dateRanges = dateRange;
request.limit=10;
request.dimensionFilter = dimensionfilter;
const report = AnalyticsData.Properties.runReport(request,'properties/' + propertyId);
if (!report.rows) {
Logger.log('No rows returned.');
return;
}
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
// Append the headers.
const dimensionHeaders = report.dimensionHeaders.map(
(dimensionHeader) => {
return dimensionHeader.name;
});
const metricHeaders = report.metricHeaders.map(
(metricHeader) => {
return metricHeader.name;
});
const headers = [...dimensionHeaders, ...metricHeaders];
sheet.appendRow(headers);
// Append the results.
const rows = report.rows.map((row) => {
const dimensionValues = row.dimensionValues.map(
(dimensionValue) => {
return dimensionValue.value;
});
const metricValues = row.metricValues.map(
(metricValues) => {
return metricValues.value;
});
return [...dimensionValues, ...metricValues];
});
sheet.getRange(2, 1, report.rows.length, headers.length)
.setValues(rows);
Logger.log('Report spreadsheet created: %s',
spreadsheet.getUrl());
} catch (e) {
// TODO (Developer) - Handle exception
Logger.log('Failed with error: %s', e.error);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是您可以应用维度过滤器
编辑的方式:对于多个过滤器,
将多个过滤器与
或
条件相结合,您可以参考此文档以了解如何确定方法签名
This is how you can apply Dimension Filter
Edit: For multiple filters
To combine multiple filters with
OR
conditionYou can refer to this document to understand How method signatures are determined
我一直在努力算出如何添加过滤器,所以感谢此。我想添加一个排除过滤器,以过滤一些国家垃圾邮件!我以为使用GA4,我们过去是分析中的垃圾邮件。
I have been trying to work out how to add filters so thanks for this. I wanted to add a exclusion filter, to filter out some country spam! I thought with GA4 we were past spam in Analytics.. Anyway - here is how I filtered Germany out of my request: