В таблице 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
.
Это ожидаемое поведение?Чтобы получить разные результаты для одного и того же значения в зависимости от того, какие другие показатели рассчитываются?Я понимаю, почему это происходит, но я не уверен, должно ли это.
Есть ли способ обойти это?Может быть, способ заставить расчетные карты рассчитываться по их собственному запросу, а не пытаться объединить их в один?Кажется, что попытка вычислить обе эти метрики в одном запросе приводит к неправильному ответу из-за требуемых объединений.Или, может быть, способ указать системе показателей только для суммирования уникальных записей?
Надеюсь, я объяснил это ясно.Спасибо за помощь.