电源查询 - 从表中选择列,而不是之后删除

时间:2016-01-22 03:33:15

标签: powerbi powerquery

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

有没有办法反过来?即从表中选择所需的列?最好不要使用Native SQL解决方案。

L:

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 

上面的代码段显示了连接和随后的删除。

与原生SQL方式相比:

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

我在步骤中看不到关于}[Data],值的大量文档,所以希望我可以劫持该字段以指定该数据中的哪些字段。

任何想法都会很棒! :)

我首先担心的是,当它被编译成SQL时,会以两个查询的形式发送(在ExpressProfiler中观察)。

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

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

1 个答案:

答案 0 :(得分:3)

在我再次思考并查看filter_Copy_Selected_Columns_Results之后,这真的很容易。

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而不是两个。