【问题标题】:Power Query - Select Columns from table instead of removing afterwardsPower Query - 从表中选择列而不是之后删除
【发布时间】:2016-01-22 03:33:14
【问题描述】:

从数据库表(如 SQL Server)导入数据时的默认行为是引入所有列,然后选择要删除的列。

有没有办法做相反的事情?即从表中选择您想要的列?最好不使用 Native SQL 解决方案。

男:

let
    db = Sql.Databases("sqlserver.database.url"){[Name="DatabaseName"]}[Data],
    Sales_vDimCustomer = db{[Schema="Sales",Item="vDimCustomer"]}[Data],
    remove_columns = Table.RemoveColumns(Sales_vDimCustomer,{"Key", "Code","Column1","Column2","Column3","Column4","Column5","Column6","Column7","Column8","Column9","Column10"})
in
    remove_columns 

上面的 sn -p 显示了连接和随后的删除。

对比原生SQL方式方式:

= Sql.Database("sqlserver.database.url", "DatabaseName", [Query="
    SELECT Name,
           Representative,
           Status,
           DateLastModified, 
           UserLastModified,  
           ExtractionDate
    FROM Sales.vDimCustomer
"])

我在该步骤中看不到有关 }[Data], 值的太多文档,因此希望我可以劫持该字段以指定该数据中的哪些字段。

任何想法都会很棒! :)

我首先担心的是,当它被编译为 SQL 时,它会作为两个查询发送(如在 ExpressProfiler 中所看到的)。

第一个查询删除选定的列,第二个查询选择所有列。

我的第二个担忧是,如果在数据库中添加或删除列,那么它可能会使我的报告崩溃(Excel 表格中的其他列会将您的结构化表格语言公式跳转到错误的列)。这不是使用 Native SQL 的问题,因为它只是不会选择新列,并且如果删除该列实际上会崩溃,这是我想知道的。

【问题讨论】:

    标签: powerbi powerquery


    【解决方案1】:

    在我再次思考并查看docs 之后,这实际上很容易。

    let db = Sql.Databases("sqlserver.database.url"){[Name="DatabaseName"]}[Data], Sales_vDimCustomer = Table.SelectColumns( (db{[Schema="Sales",Item="vDimCustomer"]}[Data], { "Name", "Representative", "Status", "DateLastModified", "UserLastModified", "ExtractionDate" } ) in Sales_vDimCustomer

    这也比其他方式加载速度快得多,并且只生成一个请求的 SQL 而不是两个。

    【讨论】:

    • Table.SelectColumns 是正确的解决方案!如果您使用预览编辑器多选您想要的列并右键单击,“删除其他列”操作将生成对 Table.SelectColumns 的调用 :)
    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2019-03-28
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多