在Google数据工作室中重复列的空值显示问题

3

在尝试从非规范化表中提取信息并在Google数据工作室中进行可视化时,我遇到了一些问题。

背景:我想在Big Query中的一个表中收集公司所有联系人及其相关订单。一个联系人可能没有订单或者有多个订单。根据Big Query最佳实践,该表被非规范化,每个客户的所有订单都在结构体数组中。它看起来像这样:

字段示例

+-------+------------+-------------+-----------+
| Row # | Contact_Id | Orders.date | Orders.id |
+-------+------------+-------------+-----------+
|-  1   | 23         | 2019-02-05  | CB1       |
|       |            | 2020-03-02  | CB293     |
|-  2   | 2321       |   -         |   -       |
|-  3   | 77         | 2010-09-03  | AX3       |
+-------+------------+-------------+-----------+

问题出现在我想在Data Studio中使用这个表作为数据源时。 例如,如果我建立一个以Contact_Id作为维度的表,则一切都很好,我可以看到所有的联系人。然而,如果我添加任何来自订单结构的维度,所有没有订单的联系人信息都不会显示。例如,Contact_Id 2321的所有信息都从表中删除了。
您是否找到任何解决方法来可视化这些空数组(例如作为null值)? 我找到的唯一解决方案是建立一个包含未嵌套订单的中间表。

你是如何将你的 BigQuery 数据连接到 DataStudio 的?你是否按照文档描述添加了一个新数据源?我使用了你的数据并成功地添加了一个新数据源,以便在DataStudio中创建报告。然后,我按照你所描述的创建了一个表,并能够看到所有的值。你想让我提供我所采取的步骤吗? - Alexandre Moraes
感谢您的回复 @AlexandreMoraes!是的,我创建了一个数据源(使用 Big Query 连接器)。在 Data Studio 中创建的表包含所有维度吗(contact_id、orders.date 和 orders.id)?您能够可视化 contact_id = 2321 的数据吗?如果您能提供一张截图和操作步骤,我将非常感激。非常感谢! - Arthur_H2
@Arthur_H2,你找到如何显示contact_id=2321的信息了吗?我也遇到了同样的问题。 - Luiscri
2个回答

0

您可以通过在BigQuery连接器上稍微更改查询来修复此行为。

不要这样做:

SELECT
    Contact_id,
    Orders
FROM myproject.mydataset.mytable

试试这个:

SELECT
    Contact_id,
    IF(ARRAY_LENGTH(Orders) > 0, Orders, [STRUCT(CAST(NULL AS DATE) AS date, CAST(NULL AS STRING) AS id)]) AS Orders
FROM myproject.mydataset.mytable

这样做可以强制使您的重复字段至少包含一个包含NULL值的数组,因此Data Studio将表示这些缺失值。

此外,如果您想使用嵌套字段之一创建新的计算字段,则应在填充所有NULL值之前检查该值是否为NULL。例如,如果您有一个可以是10的重复和嵌套字段,并且您想创建一个交换值的计算字段,则应执行以下操作:

IF(myfield.key IS NOT NULL, IF(myfield.key = 1, 0, 1), NULL)

在这里您可以看到如果在交换之前检查和不检查会发生什么:

Original value        No check        Check
1                     0               0
0                     1               1
NULL                  1               NULL
1                     0               0
NULL                  1               NULL

0
我刚刚发现的解决方法是在我的DS->BQ连接器中添加一个额外的字段:
ARRAY_LENGTH(fields.orders) AS numberoforders

如果数组为空,这将返回零 - 然后您可以在DataStudio中创建计算字段 - 使用“numberoforders”字段强制值为NULL或零。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接