在 Power BI 中使用 BigQuery 重复/嵌套字段
Posted
技术标签:
【中文标题】在 Power BI 中使用 BigQuery 重复/嵌套字段【英文标题】:Using BigQuery repeated / nested fields in Power BI 【发布时间】:2018-04-25 07:39:34 【问题描述】:问题:将 Power BI 连接到具有重复/嵌套字段的 BigQuery 表(使用本机 BQ 连接器)时,这些字段不会出现在 Power BI 中以用于创建报表。
示例:使用名为 bigquery-public-data:samples 的公共 BigQuery 数据集,有一个名为 github_nested 的表,其中包含重复字段,例如 payload.pages.action(见下文)
但是,当使用 Power BI 连接到此 BigQuery 表时,我只能获得少数字段(见下文)
据我了解,这是因为 Power BI Big Query 连接器不支持重复/嵌套或记录字段。
问题:在构建 Power BI 报表时,是否可以使用 BigQuery 表中的所有列/字段(无论它们是否重复/嵌套/记录),特别是使用通过本机 Power BI Big Query 连接器进行实时连接?
我在 BigQuery 中确实具有写入权限,因此如果作为解决方案的一部分需要,可以在这些表上创建具有重复/嵌套字段的视图。
一种可能的解决方法可能是在 Big Query 中创建一个视图,该视图取消嵌套重复字段,然后将 Power BI 连接到所述视图。接受任何解决方法建议。
任何帮助将不胜感激。
【问题讨论】:
好像不支持这个,有一个FR here,但目前没有太大的吸引力。 感谢@GuillemXercavins。是的,我还了解到 Power BI BigQuery 连接器不支持重复/嵌套列,但是,我想知道是否有任何解决方法可以启用这些列的报告?例如,一个想法可能是在 Big Query 中创建一个视图,该视图取消嵌套重复字段,然后将 Power BI 连接到所述视图。接受任何解决方法建议。 是的,这可能是最好的选择 感谢@GuillemXercavins,但是我不确定如何执行此操作,或者这是否确实是最好的方法。这就是我提出这些问题的原因,看看是否有人以前可能已经成功地做到了这一点,或者是否有比我更了解 BigQuery 的人可以提供帮助。 【参考方案1】:Power BI 没有(截至 2018 年 10 月 29 日)本机 Big Query 连接器,它仅使用通用 ODBC 连接器。我建议不要将它用于生产,目前的限制是:
如果您的结算项目与数据集项目不同,则不支持 GCP 结算帐号 不支持 Google 服务帐户 不支持嵌套和重复字段 请求未优化(错误的 finops) 不支持通过 Big Query 链接到 Google 表格的数据集 某些数据类型未正确处理 无法手动编辑请求(以 BQ 标准 SQL 为例)在这篇文章中了解更多(我是作者):https://medium.com/@remy_david/which-bi-tool-for-big-query-d9eb838ff7ad
【讨论】:
【参考方案2】:products-and-stocks
表的示例架构:
[
name: 'timestamp',
type: 'TIMESTAMP'
,
name: 'data',
type: 'RECORD',
mode: "REPEATED",
fields: [
name: 'itemId',
type: 'STRING'
,
name: 'prodId',
type: 'STRING'
,
name: 'name',
type: 'STRING'
,
name: 'stockA',
type: 'INTEGER'
,
name: 'stockB',
type: 'INTEGER'
,
name: 'stockQ',
type: 'INTEGER'
,
name: 'stockD',
type: 'INTEGER'
,
name: 'stockE',
type: 'INTEGER'
,
name: 'weight',
type: 'INTEGER'
,
name: 'size',
type: 'RECORD',
fields: [
name: 'length',
type: 'INTEGER'
,
name: 'width',
type: 'INTEGER'
,
name: 'height',
type: 'INTEGER'
]
,
name: 'cnt',
type: 'INTEGER'
,
name: 'cntInBox',
type: 'INTEGER'
,
name: 'lifetime',
type: 'INTEGER'
,
name: 'barcode',
type: 'STRING',
mode: 'REPEATED',
,
name: 'dateStockUpdate',
type: 'TIMESTAMP'
,
name: 'label',
type: 'STRING'
,
name: 'comment',
type: 'STRING'
,
name: 'commentPack',
type: 'STRING'
,
name: 'skuBox',
type: 'INTEGER'
,
name: 'snRuleRegularExpression',
type: 'STRING'
]
]
在 BigQuery 中创建展平查询并将其保存为视图。
SELECT
`timestamp`,
repeated.*,
repeated.size.length as `size_length`,
repeated.size.width as `size_width`,
repeated.size.height as `size_height`,
ARRAY_TO_STRING(barcode, ", ") as barcodesFlat
FROM
`my-project-id.my-dataset.products-and-stocks`
CROSS JOIN UNNEST(`data`) as repeated
将此视图导入 Power BI。
【讨论】:
以上是关于在 Power BI 中使用 BigQuery 重复/嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有平台、steam_id、event_name 过滤器的 bigquery 在 power bi 中编写查询以查找过去 28 天的 firebase 事件详细信息?
Power BI Python 在Power BI Desktop中Python代码如何使用Power Query数据