Power Query公式语言 - 检测列的类型

时间:2016-02-24 13:59:03

标签: powerbi powerquery

在Power BI中,我有一些从导入数据生成的查询表。所有数据都以“Any”类型出现,我正在尝试自动检测每列中的数据类型。

某些查询根据即将到来的数据生成包含列的表 - 我不知道在查询运行并设置表(数据来自Azure blob)之前列将是什么。由于我将要维护相当多的表,哪些列可以更改(可能添加新列)以及任何数据刷新,因此每次遍历所有列并按列上的“检测数据类型”将无法管理。

所以我试图找出如何在查询公式语言中执行“检测数据类型”以附加到生成表列的查询的末尾。我已经尝试抓取列中的第一个条目并执行Value.Type(列{0}),但是对于其中包含整数的列,这似乎是“文本”。但是,按“检测数据类型”会将类型正确识别为“整数”。

有谁知道如何检测列的条目类型?

P.S。我不太担心列可能包含不同数据类型的值

1 个答案:

答案 0 :(得分:1)

这里似乎有多个问题。而你的解决方案将是脆弱的,这是一个更好的方法。但是,让我们首先处理列类型检测。 Power Query使用' any'数据类型,因为它转到数据类型。您可以编写一个函数来对表中列的行进行采样,以便最佳匹配数据类型检测,然后显式设置列的数据类型。这可能是混乱和棘手的,因为你需要每列一次。这对于固定模式可能是可行的,但对于动态模式,您很快就会遇到一些问题。首先,您需要编写一些疯狂的PQ代码来列出所有列并在每个列上运行您的函数。这将在第一次工作,但可能会在后续刷新时中断,因为在刷新期间不允许更改数据模型。如果您正在使用Power BI Desktop之类的工具,那么您将能够解决问题。如果将报表发布到Power BI服务,则只会看到刷新错误。

动态架构将遇到我上面提到的相同数据模型更改问题。

您遇到问题的替代解决方案是使用直接查询数据源而不是使用Power Query。如果将数据加载到Azure SQL或表格模型中,报告层将自动获取更新的字段,因此您不必尝试使用PQ。