Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Google Analytics会话范围字段返回多个值_Sql_Google Analytics_Google Bigquery - Fatal编程技术网

Sql Google Analytics会话范围字段返回多个值

Sql Google Analytics会话范围字段返回多个值,sql,google-analytics,google-bigquery,Sql,Google Analytics,Google Bigquery,我发现在BigQuery中有某些GA“session”范围的字段,它们对于相同的fullVisitorId和visitId字段具有多个值。请参见下面的示例: 对字段进行分组也没有帮助。在GA中,我检查了用户数量与不同设备划分的用户数量。用户计数不同: 这解释了发生的情况,一个用户将被分组在多个设备下。我的结论是,在用户会话的某个时刻,他们的浏览器用户代理会发生变化,在随后的hit中,GA中会设置一种新的设备类型 我希望GA会使用第一个或最后一个值来避免这种情况,但我想他们不会。我的问题是,如

我发现在BigQuery中有某些GA“session”范围的字段,它们对于相同的
fullVisitorId
visitId
字段具有多个值。请参见下面的示例:

对字段进行分组也没有帮助。在GA中,我检查了用户数量与不同设备划分的用户数量。用户计数不同:

这解释了发生的情况,一个用户将被分组在多个设备下。我的结论是,在用户会话的某个时刻,他们的浏览器用户代理会发生变化,在随后的hit中,GA中会设置一种新的设备类型

我希望GA会使用第一个或最后一个值来避免这种情况,但我想他们不会。我的问题是,如果我认为这是GA中的一个“缺陷”,我宁愿选择一个值。从以下查询中选择最后一个或第一个设备值的最佳方法是什么:

SELECT
  fullVisitorId,
  visitId,
  device.deviceCategory
FROM (
  SELECT
    *
  FROM
    `project.dataset.ga_sessions_*` desktop
  UNION ALL
  SELECT
    *
  FROM
    `project.dataset.ga_sessions_*` mobile ) table
我尝试过使用
STRING\u AGG()
进行子选择,尝试按
hits.time
排序,并限制为一个值,但仍然会创建另一行

我已经测试并发现以下字段都有相同的问题:

visitNumber
totals.hits
totals.pageviews
totals.timeOnSite
trafficSource.campaign
trafficSource.medium
trafficSource.source
device.deviceCategory
totals.sessionQualityDim
channelGrouping
device.mobileDeviceInfo
device.mobileDeviceMarketingName
device.mobileDeviceModel
device.mobileInputSelector
device.mobileDeviceBranding
更新

请参阅以下有关此特定
fullVisitorId
visitId
的查询-已删除联合:

访问开始时间
添加:

visitStartTime
hits.time
添加:

从外观上看,我认为您有3种选择:

1-按fullVisitorId、visitId分组;并使用最大或最小设备类别。这应该可以防止设备切换器被重复计数,这是任意的,但是GA数据也是如此

2-选项二类似,但如果deviceCategory结果可以是任何内容(即,结果中仅限于有效的deviceCategory成员),则可以使用案例检查MAX(deviceCategory)=MIN(deviceCategory),如果它们不同,则返回“多个设备”

3-您可以更进一步,计算使用的不同设备的数量,构造一个以某种方式列出它们的串联,等等

我要给你写第二篇。在您的问题中,您有两个不同的查询:一个有[date],另一个没有-我将同时提供这两个查询

无[日期]:

SELECT
    fullVisitorId,
    visitId,
    case when max(device.deviceCategory) = min(device.deviceCategory) 
       then max(device.deviceCategory) 
       else 'Multiple Devices' 
    end as deviceCategory,
    {metric aggregations here}
FROM 
    (SELECT *
        FROM `project.dataset.ga_sessions_*` desktop
    UNION ALL
    SELECT *
        FROM `project.dataset.ga_sessions_*` mobile 
    ) table
GROUP BY fullVisitorId, visitId
注明[日期]:

SELECT
    [date],
    fullVisitorId,
    visitId,
    case when max(device.deviceCategory) = min(device.deviceCategory) 
       then max(device.deviceCategory) 
       else 'Multiple Devices' 
    end as deviceCategory,
    {metric aggregations here}
FROM 
    (SELECT *
        FROM `project.dataset.ga_sessions_*` desktop
    UNION ALL
    SELECT *
        FROM `project.dataset.ga_sessions_*` mobile 
    ) table
GROUP BY [date], fullVisitorId, visitId
我在这里假设你给出的选择和联合是合理的

同样,我应该指出那些{metric aggregations}应该是和之外的东西,否则你仍然会重复计算


我希望这能有所帮助。

从外观上看,我认为您有3种选择:

1-按fullVisitorId、visitId分组;并使用最大或最小设备类别。这应该可以防止设备切换器被重复计数,这是任意的,但是GA数据也是如此

2-选项二类似,但如果deviceCategory结果可以是任何内容(即,结果中仅限于有效的deviceCategory成员),则可以使用案例检查MAX(deviceCategory)=MIN(deviceCategory),如果它们不同,则返回“多个设备”

3-您可以更进一步,计算使用的不同设备的数量,构造一个以某种方式列出它们的串联,等等

我要给你写第二篇。在您的问题中,您有两个不同的查询:一个有[date],另一个没有-我将同时提供这两个查询

无[日期]:

SELECT
    fullVisitorId,
    visitId,
    case when max(device.deviceCategory) = min(device.deviceCategory) 
       then max(device.deviceCategory) 
       else 'Multiple Devices' 
    end as deviceCategory,
    {metric aggregations here}
FROM 
    (SELECT *
        FROM `project.dataset.ga_sessions_*` desktop
    UNION ALL
    SELECT *
        FROM `project.dataset.ga_sessions_*` mobile 
    ) table
GROUP BY fullVisitorId, visitId
注明[日期]:

SELECT
    [date],
    fullVisitorId,
    visitId,
    case when max(device.deviceCategory) = min(device.deviceCategory) 
       then max(device.deviceCategory) 
       else 'Multiple Devices' 
    end as deviceCategory,
    {metric aggregations here}
FROM 
    (SELECT *
        FROM `project.dataset.ga_sessions_*` desktop
    UNION ALL
    SELECT *
        FROM `project.dataset.ga_sessions_*` mobile 
    ) table
GROUP BY [date], fullVisitorId, visitId
我在这里假设你给出的选择和联合是合理的

同样,我应该指出那些{metric aggregations}应该是和之外的东西,否则你仍然会重复计算


我希望这能有所帮助。

这个字段中的一行不能有两个值,因为它只能包含一个值

有两种可能性:

  • 实际上,您正在查询两个独立的数据集/两个不同的视图-这在示例代码中并不明显。客户id(=fullvisitorid)仅在每个属性(跟踪id,UA-xxxxx)中是唯一的。如果您从不同的属性查询两个不同的视图,您必须期望得到两次使用的相同ID

  • 考虑到它们来自一个属性,这两行实际上可能是午夜拆分的一个会话,这意味着visitId保持不变,但visitStartTime会发生变化。但这也意味着同时改变了设备类型的决策算法。。。这很奇怪

  • 尝试使用visitStartTime,看看会发生什么。 如果您使用两个不同的属性,请使用用户id通过添加常量来组合或分离会话-您不能组合它们。
    选择“property\u A”作为常数,从…


    hth

    该字段中的一行不可能有两个值,因为它只能包含一个值

    有两种可能性:

  • 实际上,您正在查询两个独立的数据集/两个不同的视图-这在示例代码中并不明显。客户id(=fullvisitorid)仅在每个属性(跟踪id,UA-xxxxx)中是唯一的。如果您从不同的属性查询两个不同的视图,您必须期望得到两次使用的相同ID

  • 考虑到它们来自一个属性,这两行实际上可能是午夜拆分的一个会话,这意味着visitId保持不变,但visitStartTime会发生变化。但这也意味着同时改变了设备类型的决策算法。。。这很奇怪

  • 尝试使用visitStartTime,看看会发生什么。 如果您使用两个不同的属性,请使用用户id通过添加常量来组合或分离会话-您不能组合它们。
    选择“property\u A”作为常数,从…


    hth

    这里有一个解决方案给你…这里有一个解决方案给你…这很有帮助,谢谢。我一定会的