Можно ли использовать повторяющиеся поля BigQuery в вычислениях Data Studio? - PullRequest
1 голос
/ 14 мая 2019

В таблице BigQuery у меня есть следующие данные в строке 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 и пытаюсь отобразить общую суммуполя 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.На карте инвентаризации должно быть указано 102.08, что составляет 2.33 + 17.23 + 25.99 + 15.95 + 25.02 + 15.56.

На самом деле я получаю правильное значение для карты инвентаризации, но неверное значение для промежуточной карты.Общее количество показаний на карте промежуточных итогов составляет 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);

Теперь, что меня действительно беспокоит, так это то, что, если я удаляю карточку инвентаризации и только запрашиваю промежуточный итог, возвращается правильное значение.Другими словами, если единственная система показателей на странице предназначена для промежуточного итога, возвращаемое значение является ожидаемым 247.91.

Это ожидаемое поведение?Чтобы получить разные результаты для одного и того же значения в зависимости от того, какие другие показатели рассчитываются?Я понимаю, почему это происходит, но я не уверен, должно ли это.

Есть ли способ обойти это?Может быть, способ заставить расчетные карты рассчитываться по их собственному запросу, а не пытаться объединить их в один?Кажется, что попытка вычислить обе эти метрики в одном запросе приводит к неправильному ответу из-за требуемых объединений.Или, может быть, способ указать системе показателей только для суммирования уникальных записей?

Надеюсь, я объяснил это ясно.Спасибо за помощь.

1 Ответ

1 голос
/ 14 мая 2019

Плохая новость: вы обнаружили ошибку в Data Studio и то, как она обрабатывает несколько вложенных столбцов.

Хорошие новости, я получил правильные результаты для отображения на информационной панели Data Studio:

enter image description here

Секрет получения правильных результатов: я создал два разных источника, указывающих на одну и ту же таблицу.Затем Data Studio не пытается запросить оба столбца одновременно.Если вы посмотрите на мой отчет, вы увидите, что каждая из этих карт показателей использует свой источник данных.К счастью, выбор управления фильтром используется с обоими источниками данных.

Почему Data Studio дает неверные результаты при использовании одного и того же источника данных для обоих?Потому что DS пытается оптимизировать и получить результаты только в одном запросе, который CROSS объединяет (ошибочно) оба вложенных столбца.Вы можете найти запрос, просмотрев свои журналы BigQuery.

enter image description here

Вы можете найти и поиграть с моей общей таблицей на https://console.cloud.google.com/bigquery?p=fh-bigquery&d=public_dump&t=onerowjson_201905&page=table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...