Excel Power Query - Dynamics 365 Online - 从另一个 table 获取名称而不合并
Excel Power Query - Dynamics 365 Online - get names from another table without Merge
我正在使用“从 Dynamics 365(在线)获取数据”功能将一些机会从我们的 Dyn365 实例提取到 Excel。某些列(即帐户、卖家等)显示 GUID 而不是名称,为了查看名称,我需要使用合并查询并将相关的 table 拉入 Excel.
问题是,Accounts table 有大约 800k 条记录,Sellers table 也不小,所以即使我减少要加载的列数,它仍然需要大约 7 分钟刷新此查询。我的问题:
- 不需要合并 table 就可以实现吗?
- 或者,我可以使用合并,但不必将帐户和卖家加载到工作表中吗?
- 有没有更好的方法来完成我想做的事情?
(动态工作表导出除外)?
//2022 年 5 月 31 日编辑
M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Opportunities"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"OpportunityID", type text}, {"OpportunityNumber", type text}, {"Account", type text}, {"Seller", type text}}),
#"Merged Queries" = Table.Buffer(Table.NestedJoin(#"Changed Type", {"Account"}, Accounts, {"AccountID"}, "Accounts", JoinKind.LeftOuter)),
#"Expanded Accounts" = Table.ExpandTableColumn(#"Merged Queries", "Accounts", {"CustomerName", "Country"}, {"Accounts.CustomerName", "Accounts.Country"}),
#"Merged Queries1" = Table.Buffer(Table.NestedJoin(#"Expanded Accounts", {"Seller"}, Sellers, {"SellerID"}, "Sellers", JoinKind.LeftOuter)),
#"Expanded Sellers" = Table.ExpandTableColumn(#"Merged Queries1", "Sellers", {"SellerName"}, {"Sellers.SellerName"})
in
#"Expanded Sellers"
//Edit2 - 下面甚至不想加载到预览中(即永远行进的蚂蚁)。如果没有“Table.Buffer()”,预览会在几秒钟内加载。
let
Source = OData.Feed("https://mydomain.crm.dynamics.com/api/data/v8.2/", null, [Implementation="2.0"]),
#"BufferedOpportunities" = Table.Buffer(Source{[Name="opportunities",Signature="table"]}[Data])
in
#"BufferedOpportunities"
关于第 2 点:
- 您无需将 Accounts 和 Sellers 表加载到工作表中即可进行合并。您可以在 Excel 的查询和连接窗格中右键单击查询,并确保为这两个查询中的每一个都勾选仅创建连接。然后将从工作簿中卸载表格,这将节省大量时间。
编辑:
试试这个。我是徒手输入的,所以不能保证没有错误,但它应该能让你知道你需要做什么。
let
Source = Excel.CurrentWorkbook(){[Name="Opportunities"]}[Content],
#"Changed Type" = Table.Buffer( Table.TransformColumnTypes(Source,{{"OpportunityID", type text}, {"OpportunityNumber", type text}, {"Account", type text}, {"Seller", type text}})),
BufferedAccounts = Table.Buffer(Accounts),
BufferedSellers = Table.Buffer(Sellers),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Account"}, BufferedAccounts, {"AccountID"}, "Accounts", JoinKind.LeftOuter),
#"Expanded Accounts" = Table.ExpandTableColumn(#"Merged Queries", "Accounts", {"CustomerName", "Country"}, {"Accounts.CustomerName", "Accounts.Country"}),
#"Merged Queries1" = Table.NestedJoin(#"Expanded Accounts", {"Seller"}, BufferedSellers, {"SellerID"}, "Sellers", JoinKind.LeftOuter),
#"Expanded Sellers" = Table.ExpandTableColumn(#"Merged Queries1", "Sellers", {"SellerName"}, {"Sellers.SellerName"})
in
#"Expanded Sellers"
我正在使用“从 Dynamics 365(在线)获取数据”功能将一些机会从我们的 Dyn365 实例提取到 Excel。某些列(即帐户、卖家等)显示 GUID 而不是名称,为了查看名称,我需要使用合并查询并将相关的 table 拉入 Excel.
问题是,Accounts table 有大约 800k 条记录,Sellers table 也不小,所以即使我减少要加载的列数,它仍然需要大约 7 分钟刷新此查询。我的问题:
- 不需要合并 table 就可以实现吗?
- 或者,我可以使用合并,但不必将帐户和卖家加载到工作表中吗?
- 有没有更好的方法来完成我想做的事情? (动态工作表导出除外)?
//2022 年 5 月 31 日编辑
M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Opportunities"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"OpportunityID", type text}, {"OpportunityNumber", type text}, {"Account", type text}, {"Seller", type text}}),
#"Merged Queries" = Table.Buffer(Table.NestedJoin(#"Changed Type", {"Account"}, Accounts, {"AccountID"}, "Accounts", JoinKind.LeftOuter)),
#"Expanded Accounts" = Table.ExpandTableColumn(#"Merged Queries", "Accounts", {"CustomerName", "Country"}, {"Accounts.CustomerName", "Accounts.Country"}),
#"Merged Queries1" = Table.Buffer(Table.NestedJoin(#"Expanded Accounts", {"Seller"}, Sellers, {"SellerID"}, "Sellers", JoinKind.LeftOuter)),
#"Expanded Sellers" = Table.ExpandTableColumn(#"Merged Queries1", "Sellers", {"SellerName"}, {"Sellers.SellerName"})
in
#"Expanded Sellers"
//Edit2 - 下面甚至不想加载到预览中(即永远行进的蚂蚁)。如果没有“Table.Buffer()”,预览会在几秒钟内加载。
let
Source = OData.Feed("https://mydomain.crm.dynamics.com/api/data/v8.2/", null, [Implementation="2.0"]),
#"BufferedOpportunities" = Table.Buffer(Source{[Name="opportunities",Signature="table"]}[Data])
in
#"BufferedOpportunities"
关于第 2 点:
- 您无需将 Accounts 和 Sellers 表加载到工作表中即可进行合并。您可以在 Excel 的查询和连接窗格中右键单击查询,并确保为这两个查询中的每一个都勾选仅创建连接。然后将从工作簿中卸载表格,这将节省大量时间。
编辑:
试试这个。我是徒手输入的,所以不能保证没有错误,但它应该能让你知道你需要做什么。
let
Source = Excel.CurrentWorkbook(){[Name="Opportunities"]}[Content],
#"Changed Type" = Table.Buffer( Table.TransformColumnTypes(Source,{{"OpportunityID", type text}, {"OpportunityNumber", type text}, {"Account", type text}, {"Seller", type text}})),
BufferedAccounts = Table.Buffer(Accounts),
BufferedSellers = Table.Buffer(Sellers),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Account"}, BufferedAccounts, {"AccountID"}, "Accounts", JoinKind.LeftOuter),
#"Expanded Accounts" = Table.ExpandTableColumn(#"Merged Queries", "Accounts", {"CustomerName", "Country"}, {"Accounts.CustomerName", "Accounts.Country"}),
#"Merged Queries1" = Table.NestedJoin(#"Expanded Accounts", {"Seller"}, BufferedSellers, {"SellerID"}, "Sellers", JoinKind.LeftOuter),
#"Expanded Sellers" = Table.ExpandTableColumn(#"Merged Queries1", "Sellers", {"SellerName"}, {"Sellers.SellerName"})
in
#"Expanded Sellers"