Power-Query / Power-Bi:仅在列类型存在的情况下如何更改它们?

时间:2020-06-16 14:29:46

标签: powerbi dax powerquery m

我在power-query中加载了一个巨大的excel表(使用import .csv)。此导入会自动检测列类型并分别进行更改:

Table.TransformColumnTypes(#"Höher gestufte Header",{{"ID", Int64.Type}, {"Country", type text}, {"Customer", type text}, {"Release Name", type text}, {"Hardware Systems", type text}, {"Service By", type text}, {"Hwirelease Tags", type text}, {"Country Tags", type text}, {"Created", type datetime}, {"Last Change", type datetime}, {"Scope", type text}, {"PPM PID", Int64.Type}, {"Salesforce IDs", type text}})

问题:

问题开始于我知道将源代码更改为与较早的日期不同的.csv,在较早的日期中,之前提到的某些列中不存在nox(例如PPM PID)。 我收到错误消息,必须手动删除试图更改相应列的命令。

问题:

有一些简单的解决方法,以便Power-Query仅在列存在的情况下才尝试更改列类型吗?还是当列名倾向于随时间更改其名称时,我的完整方法不好吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法可能是:

  1. 创建一个成对的结构(即列表或记录),其中每个对代表一个列名及其对应的类型。包括所有可能的列(存在的列和不存在的列)。
  2. 过滤集合以仅保留表中存在的列,然后将过滤后的集合传递给Table.TransformColumnTypes

举个例子:

let
    #"Höher gestufte Header" = Table.FromColumns({
        {1, 6, 45, 67},
        {"US", "JA", "CA", "GB"}
    }, {"ID", "Country"}),
    typeTransformations = {{"ID", Int64.Type}, {"Country", type text}, {"Customer", type text}, {"Release Name", type text}, {"Hardware Systems", type text}, {"Service By", type text}, {"Hwirelease Tags", type text}, {"Country Tags", type text}, {"Created", type datetime}, {"Last Change", type datetime}, {"Scope", type text}, {"PPM PID", Int64.Type}, {"Salesforce IDs", type text}},
    changeTypes = Table.TransformColumnTypes(#"Höher gestufte Header", List.Select(typeTransformations, each Table.HasColumns(#"Höher gestufte Header", _{0})))
in
    changeTypes