我在Power Query下运行MS SQL以将一些数据导入Excel。
我们有几个项目和代码来自另一个查询,如下所示:
let
Source = Projects[Code]
in
Source
示例数据:
+------+
| code |
+------+
| 2 |
| 3 |
| 6 |
| 76 |
| 77 |
| 78 |
| 79 |
| 80 |
| 81 |
| 82 |
| 83 |
| 84 |
| 85 |
| 86 |
| 87 |
| 88 |
| 89 |
| 90 |
| 91 |
| 92 |
| 93 |
| 94 |
| 95 |
| 96 |
| 97 |
| 99 |
| 100 |
| 101 |
| 102 |
| 103 |
+------+
我想要做的是,为每个项目代码运行以下主查询。
let
Source = Sql.Database("server", "logo", [Query="select '92' as [santiye] , stockref, DATE_ , AMOUNT, PRICE, total from LG_092_01_STLINE where cancelled = 0 and TRCODE =1"]),
#"Merged Queries" = Table.NestedJoin(Source,{"stockref"},Query2,{"stockref"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"CODE", "NAME"}, {"NewColumn.CODE", "NewColumn.NAME"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"stockref"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"}),
#"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns",{{"santiye", Int64.Type}}),
#"Merged Queries1" = Table.NestedJoin(#"Changed Type",{"santiye"},Projects,{"Code"},"NewColumn",JoinKind.LeftOuter),
#"Expanded NewColumn1" = Table.ExpandTableColumn(#"Merged Queries1", "NewColumn", {"Project Name"}, {"NewColumn.Project Name"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded NewColumn1",{{"NewColumn.Project Name", "Project Name"}}),
#"Reordered Columns1" = Table.ReorderColumns(#"Renamed Columns",{"santiye", "Project Name", "NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"})
in
#"Reordered Columns1"
SQL中的表名称应动态更改,并作为循环从其他查询中获取,并立即联合所有数据。
LG_092_01_STLINE = LG_ {code} _01_STLINE
[查询="选择' 92' as = [Query ="选择{code}为
我在SQL查询中做了类似的循环但是" exec()"在电源查询中不起作用。
while @cnt <= @maxrow
begin
select @firma = nr from (SELECT ROW_NUMBER() over (order by logicalref asc) as NUM, NR FROM L_CAPIFIRM ) nn where NUM = @cnt
select @santiye = name from L_CAPIFIRM where NR = @firma
set @firma = RIGHT('000'+CAST(@firma AS VARCHAR(3)),3)
set @items = 'LG_' + convert(nvarchar(3),@firma) + '_ITEMS'
set @stline = 'LG_' + convert(nvarchar(3),@firma) + '_01_STLINE'
答案 0 :(得分:0)
我认为在没有编写一行M代码的情况下这样做是非常简单的,因为看起来每个表中的列列表是一致的。
首先,我将连接到该服务器上的SQL数据库并选择任意随机表并编辑生成的查询。然后导航回Source步骤并在Data列中单击Database的行。这将为您提供该数据库中的表列表。
将列表过滤到所需的表格。您可以使用任何类型的过滤器执行此操作,或者对于您的场景,您可以通过使用加入类型:内部联接的合并来实现此目的。
现在点击Data列的列标题中的Expand按钮。现在,您将所选表中的每一行都附加在一起。您可以将下游转换添加到此查询中。
在没有一行代码的情况下完成4次点击。 Power Query是一个功能非常强大的数据集成工具。
Power Query对表格架构的变化有着惊人的容忍度 - 我从来没有见过类似的东西。它通常会增加常识性结果,例如为缺少列的表返回null,按名称匹配列(不是SQL UNION中的列位置),以及尝试转换具有冲突数据类型的列。它似乎从第一个表生成列列表。一如既往,仔细测试。