【问题标题】:Update an existing custom dimension, or insert if not present更新现有的自定义维度,如果不存在则插入
【发布时间】:2019-01-08 17:12:39
【问题描述】:

我有一个插入 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

【问题讨论】:

    标签: google-apps-script google-analytics google-api custom-dimensions


    【解决方案1】:

    可能您的问题是您正在使用整数键而不是键名访问对象:destinationContent[i] 变为 destinationContent[0]destinationContent[1] 等。但您显然已将 destinationContent 定义为只有键 namescopeactive。您还可以重复使用迭代器变量i,这肯定会使您的脚本表现得非常混乱。

    请注意,正确的 API 参考链接是 this one 和底层 REST API 资源 here

    假设您要检查目标中是否已经存在特定的源维度,如果存在,请更新它(而不是插入它),您可能需要执行以下操作:

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

    参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2018-10-20
      • 2019-01-16
      • 2019-10-17
      相关资源
      最近更新 更多