Обновите существующее пользовательское измерение или вставьте, если его нет
У меня есть скрипт для вставки пользовательских измерений Google Analytics. Это полезно для новых свойств GA, в которые я хочу скопировать пользовательские измерения. Он будет добавлен, если в свойствах получателя есть существующие пользовательские измерения.
Поэтому я хочу использовать
Analytics.Management.CustomDimensions.update()
function updateCustomDims() {
var sourceProperty = 'UA-XXXXXXXX-1'
var sourceAccount = 'XXXXXXXX'
var sourceDimensions = Analytics.Management.CustomDimensions.list(sourceAccount, sourceProperty)
var sourceItems = sourceDimensions['items']
var destinationProperty = 'UA-XXXXXXXX-1'
var destinationAccount = 'XXXXXXXX'
var destinationDimensions = Analytics.Management.CustomDimensions.list(destinationAccount, destinationProperty)
var destinationItems = destinationDimensions['items']
for (var i = 0; i < sourceItems.length; i++) {
var sourceContent = {
'name': sourceItems[i]['name'],
'scope': sourceItems[i]['scope'],
'active': sourceItems[i]['active']
}
for (var i = 0; i < destinationItems.length; i++) {
var destinationContent = {
'name': destinationItems[i]['name'],
'scope': destinationItems[i]['scope'],
'active': destinationItems[i]['active']
}
var cdId = {'id': destinationItems[i]['id']}
if (destinationContent[i] != undefined) {
Analytics.Management.CustomDimensions.update(sourceContent, destinationAccount, destinationProperty, cdId)
} else {
Analytics.Management.CustomDimensions.insert(sourceContent, destinationAccount, destinationProperty)
}
Utilities.sleep(1000)
}
}
}
Он будет добавляться только при наличии существующих пользовательских размеров. Следует обновить существующее измерение.
1 ответ
Возможно, ваша проблема в том, что вы обращаетесь к объекту с целочисленным ключом, а не с именем ключа: destinationContent[i]
становится destinationContent[0]
, destinationContent[1]
и т. д. И все же вы четко определили destinationContent
иметь только ключи name
, scope
, а также active
, У вас также есть двойное использование переменной итератора i
, что, безусловно, заставит ваш скрипт вести себя чрезвычайно запутанным образом.
Обратите внимание, что здесь указана правильная ссылка на API с базовым ресурсом REST API.
Предполагая, что вы хотите проверить, существует ли конкретное исходное измерение в месте назначения, и если да, обновите его (вместо вставки), вы захотите сделать что-то вроде:
// Create an associative map between the name of a custom dimension
// and its ID (rather than search an array repeatedly).
const existingDims = destinationItems.reduce(function (acc, item) {
var name = item.name;
acc[name] = item.id;
return acc;
}, {});
sourceItems.forEach(function (sourceItem) {
// Construct the resource for this source item.
var name = sourceItem.name;
var sourceContent = {
name: name,
scope: sourceItem['scope'],
active: sourceItem['active']
};
// Does this resource exist already?
var existingId = existingDims[name];
if (existingId)
// update
else
// insert
});
Refs
Array#reduce
Array#forEach
- Поиск объектов и поиск по массиву