如何使用DataStudio过滤BigQuery数组

时间:2019-07-30 19:02:03

标签: google-bigquery google-data-studio

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

URL 是一个值,而 TAGS 是一个数组(下面的示例):

| URL 标签
1 | x.com |驴
|孔
|生活
|在这里


DataStudio中的过滤器能否在BigQuery数组(即“标签”列)上使用?

我想在DataStudio中单击过滤器下拉列表,然后查看列表:

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

下面是查询BigQuery数组的代码,我必须使用哪里存在 unnest 从“标签”列中获取结果

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

1 个答案:

答案 0 :(得分:1)

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

尽管有一些警告。

您的表模型几乎会发生,因此,如果您要在Data Studio中为Count的{​​{1}}制作记分卡,您将得到1。如果您执行相同的操作{{1} }在URL上,您将获得4。这样,我认为行为对于大多数人期望的是理想的-您可以访问所有原始数据,就像在BigQuery结果网格中看到的一样

但是,如果您使用BI Engine来加速仪表板,那么我注意到行为有时会有所不同。 。 。也就是说,看起来数据更像是Count了,复制了非数组值以匹配数组的行。因此,以无计数示例为例,同时包含TAGSCROSS JOIN的表将显示两者的值为COUNT(URL)。这可能会弄乱一些计数/求和,因此在使用它时请务必小心谨慎。仅当在同一图表/表中同时选择一个数组字段和一个非数组字段时,才会发生这种情况。 。 。否则,行为就是您所期望的。对于某些无法由BI Engine加速的比较而言,这尤其令人困惑,因为这会更改语义,有可能破坏您的报告。如果您仅将COUNT(TAGS)之类的内容用于这些顶级字段,则无论哪种方法都可以正常工作。否则,您可能需要重组数据以确保安全。

如果您有一个庞大的数据集,并且担心要读取比所需更多的数据,则还可以使用Data Source Parameters作为将过滤器值发送到查询的一种方式,然后仅返回已在过滤器上过滤的结果BigQuery方面-尽管大多数人更喜欢直接在Data Studio中执行此操作的灵活性。