是否可以在 Data Studio 计算中使用 BigQuery 重复字段?

Is it possible to use BigQuery repeated fields in Data Studio calculations?

在 BigQuery table 中,我在 table 的第 1 行中有以下数据:

[
  {
    "order_key": "4416",
    "order_product": [
      {
        "id": "116608",
        "key": "5215",
        "subtotal": "7.99",
        "stock_move": [
          {
            "id": "64316",
            "inventory_value": "2.33",
          }
        ]
      },
      {
        "id": "116609",
        "key": "5216",
        "subtotal": "39.99",
        "stock_move": [
          {
            "id": "64317",
            "inventory_value": "17.23",
          }
        ]
      },
      {
        "id": "116611",
        "key": "5218",
        "subtotal": "139.94",
        "stock_move": [
          {
            "id": "64319",
            "inventory_value": "25.99",
          },
          {
            "id": "64320",
            "inventory_value": "15.95",
          },
          {
            "id": "64321",
            "inventory_value": "25.02",
          }
        ]
      },
      {
        "id": "116610",
        "key": "5217",
        "subtotal": "59.99",
        "stock_move": [
          {
            "id": "64318",
            "inventory_value": "15.56",
          }
        ]
      }
    ]
  }
]

我在 Google Data Studio 项目中使用这个 table,并尝试显示 order_product.subtotal 字段的总和以及 order_product.stock_move.inventory_value 字段。

似乎为了获取此数据,Data Studio 交叉连接了所有数据以解包嵌套值。这导致返回错误的总数。

例如,在 Data Studio 中我有两个记分卡,一个显示 order_product.subtotal 的总和,另一个显示 order_product.stock_move.inventory_value.

的总和

然后我有一个过滤器,我过滤 order_key = 4416。我想要的结果是小计卡片显示总数 247.91,即 7.99 + 39.99 + 59.99 + 139.94。 inventory_value 卡片应显示总数 102.08,即 2.33 + 17.23 + 25.99 + 15.95 + 25.02 + 15.56

实际上,inventory_value 卡的值是正确的,但小计卡的值是错误的。小计卡上显示的总数是 527.79,等于 (139.94 * 3) + 7.99 + 39.99 + 59.99.

因此,如您所见,139.94 值被包含了三次,因为它有三个相应的股票走势。这是 Data Studio 正在构建的连接的结果。

如果我查看 Data Studio 是 运行 的查询,我可以看到连接导致了问题:

SELECT
  SUM(t0_order_product.subtotal) AS t0_qt_0g2eyjubxb,
  SUM(t0_order_product_stock_move.inventory_value) AS t0_qt_mcntbkubxb
FROM
  `view_orders_products_stock_moves` AS t0
CROSS JOIN
  UNNEST(t0.order_product) AS t0_order_product
CROSS JOIN
  UNNEST(t0_order_product.stock_move) AS t0_order_product_stock_move
WHERE
  t0.ORDER.key IN (4416);

现在,真正困扰我的是,如果我删除 inventory_value 卡,并且只查询小计,则会返回正确的值。换句话说,如果页面上唯一的记分卡是小计,则返回的值是预期的 247.91.

这是预期的行为吗?要根据正在计算的其他指标获得相同值的不同结果?我明白为什么会这样,但我不确定是否应该如此。

有什么办法解决这个问题吗?也许是一种强制使用自己的查询计算记分卡而不是尝试将它们组合成一个的方法?由于所需的连接,尝试在一个查询中计算这两个指标似乎会导致错误的答案。或者也许是一种告诉记分卡只对唯一记录求和的方法?

希望我解释清楚了。谢谢你的帮助。

坏消息,您在 Data Studio 中发现了一个错误以及它如何处理多个嵌套列。

好消息,我在 Data Studio 仪表板上显示了正确的结果:

获得正确结果的秘诀:我创建了两个指向相同 table 的不同来源。然后 Data Studio 不会尝试同时查询两列。如果您查看我的报告,您会发现这些记分卡中的每一个都使用不同的数据源。幸运的是,过滤器控件选项用于两个数据源。

为什么 Data Studio 在对两者使用相同的数据源时给出错误的结果?因为 DS 试图优化并仅在一个查询中获得结果,该查询 CROSS JOINS(错误地)两个嵌套列。您可以通过查看 BigQuery 日志找到查询。

您可以在 https://console.cloud.google.com/bigquery?p=fh-bigquery&d=public_dump&t=onerowjson_201905&page=table

找到我共享的 table 并进行游戏