如何使用 DataStudio 过滤 BigQuery 数组

How to filter BigQuery arrays with DataStudio

我在 BigQuery 中有一个包含两列的数据集:
1。 url
2。标签

URL 是单个值,TAGS 是数组(示例如下):

| URL  | 标签
1 | x.com |驴
|香港
|生活
|这里


DataStudio 中的过滤器可以在 BigQuery 数组(即标记列)上工作吗?

我想单击 DataStudio 中的过滤器下拉菜单并查看列表:

1。驴
2。孔
3。生活
4。这里

下面是查询 BigQuery 数组的代码,我必须使用 where existsunnest 从 Tags column

select * FROM `any_table`
where exists(select * from unnest(tags) as tags where tags = 'donkey')

https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays#scanning-for-specific-values

在 Data Studio 中使用数组很容易,因为它们本身就受支持。只需为 TAGS 字段设置一个过滤器,它就会像所有单独的字段一样工作。语义是,如果数组中的至少一项与过滤器匹配,则被过滤的图表或 table 将仅包含顶级行。

不过有一些注意事项。

您的 table 模型几乎就是所发生的事情,因此如果您要在 Data Studio 中为 Count of URL 制作记分卡,您将得到 1。如果您这样做在 TAGS 上使用相同的 Count,你会得到 4。通过这种方式,我认为 be 行为是大多数人所期望的理想行为——你可以访问所有原始数据,就像你在 BigQuery 结果网格中查看。

但是,如果您使用 BI Engine 来加速您的仪表板,我注意到行为有时会有些不同。 . .也就是说,它看起来更像是数据得到 CROSS JOIN'd,复制非数组值以匹配数组的行。因此,如果没有计数示例,COUNT(URL)COUNT(TAGS) 的 table 将显示两者的值都是 4。这可能会弄乱一些 counting/summing,所以在使用它时要小心谨慎。只有当您 select 在同一个 chart/table 中既有数组字段又有非数组字段时,才会发生这种情况。 . .否则行为就是您所期望的。对于 BI Engine 无法加速的某些比较,这尤其令人困惑,因为这会改变语义,可能会破坏您的报告。如果您只对那些顶级字段使用 COUNT_DISTINCT 之类的东西,那么无论哪种方式都可以正常工作。否则,您可能需要重组数据以确保安全。

如果你有一个非常大的数据集,并且担心读取的数据比需要的多,你也可以使用 Data Source Parameters 作为将过滤器值发送到查询的方式,那么只需要 return结果已经在 BigQuery 端进行了过滤——尽管大多数人更喜欢直接在 Data Studio 中灵活地执行此操作。