Обновите существующее пользовательское измерение или вставьте, если его нет - PullRequest
0 голосов
/ 08 января 2019

У меня есть скрипт для вставки пользовательских измерений 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) 
    }
  }
}

Добавляется только при наличии существующих пользовательских размеров. Следует обновить существующее измерение.

Для справки: https://developers.google.com/resources/api-libraries/documentation/analytics/v3/java/latest/com/google/api/services/analytics/Analytics.Management.CustomDimensions.Update.html

1 Ответ

0 голосов
/ 08 января 2019

Возможно, ваша проблема в том, что вы обращаетесь к объекту с помощью целочисленного ключа, а не имени ключа: destinationContent[i] становится destinationContent[0], destinationContent[1] и т. Д. Тем не менее, вы явно определили destinationContent, чтобы иметь только клавиши name, scope и active. У вас также есть двойное использование переменной итератора i, что, безусловно, заставит ваш скрипт вести себя крайне запутанно.

Обратите внимание, что правильная ссылка API - это эта с базовым ресурсом API REST здесь .

Предполагая, что вы хотите проверить, существует ли конкретное исходное измерение в месте назначения, и если это так, обновить его (вместо вставки), вы захотите сделать что-то вроде:

// 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
});

1020 * работы *

...