我在Excel中使用Power Query来引用同一工作簿中的表。我想在该表中选择特定列。我知道可以通过将表加载到Power Query中然后选择我想要使用的列来完成。生成的查询是:
let
Source = Excel.CurrentWorkbook(){[Name="Legend_Data_Merged"]}[Content],
#"Removed Other Columns" = Table.SelectColumns(
Source,
{
"Observation number",
"First Sales Offer - Products",
"Middle Sales Offer(s) - Products",
"Last Sales Offer - Products"
}
)
in
#"Removed Other Columns"`
所以,这是我的问题:
我认为这种方式首先将整个表拉入Power Query,然后从那里拆除。我想要做的是将源表定义为" Legend_Data_Merged" table,但选择在同一操作中从该表中提取哪些列。这样,它就不必将整个表加载到Power Query中。原因是表本身大约有120列,我只需要三列,我有大约20个类似的查询,它开始占用内存。我的逻辑在这里错了吗?如果没有,任何人都知道查询会是什么?
是否可能有一种方法来定义源操作的[content]部分中的列?
感谢。
答案 0 :(得分:1)
这可能是一个非常简单的尝试,但为什么不添加一个工作表“DataTransfer”,您只需要设置对所需列的引用,并使用幂查询读取这个小表?
如果您的列靠得很近,您还可以设置命名范围,并使用powerquery只读取此范围。
但无论如何,当工作簿打开时,你的大表已经在内存中了。在使用powerquery读取表并选择三列时,应该没有太多的内存分配。
答案 1 :(得分:0)
Excel或Power Query可能存在一些问题。您看到excel.exe和Microsoft.Mashup.Container.NetFX40.exe进程使用了多少内存?
直接从[Content]
删除列的唯一方法是修改Excel表的实际数据。您可以尝试查看它是否有所作为,但Power Query通常会尝试仅仅加载所需的列。
如果您的查询使用了大量内存,您可能会以更高效的格式保存数据(我尝试使用CSV)。在任何情况下,请尝试关闭"加载到工作表"而只是加载到数据模型。
答案 2 :(得分:0)
您可以参考我的问题并回答here。
您要做的是使用Table.SelectColumns
方法而不是删除。
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
使用Express Profiler查看原始sql时,将在一个语句
中完成SELECT
$Table.Name,
$Table.Representative,
$Table.Status,
$Table.DateLastModified,
$Table.UserLastModified,
$Table.ExtractionDate
FROM
Sales.vDimCustomer as $Table
PowerBi和Power Query现在还会在尝试导入大量列时显示带有此建议的错误/警告消息。