【问题标题】:Power Query in Excel to Select Specific Cells from a columnExcel中的Power Query以从列中选择特定单元格
【发布时间】:2016-04-04 10:53:39
【问题描述】:

我在 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”表,但选择在同一操作中从该表中提取哪些列。这样,它永远不必将整个表加载到 Power Query 中。原因是表本身大约有 120 列长,而我只需要三列,而且我有大约 20 个这样的类似查询并且它开始占用内存。我在这里的逻辑错了吗?如果没有,有人知道查询是什么吗?

是否有办法在源操作的 [content] 部分定义列?

谢谢。

【问题讨论】:

    标签: excel powerquery m


    【解决方案1】:

    这可能是一个非常简单的尝试,但为什么不添加一个工作表“DataTransfer”,您只设置对您需要的列的引用并使用强大的查询读取这个小表?

    如果您的列靠得很近,您还可以设置一个命名范围并使用 powerquery 仅读取此范围。

    但是无论如何,当工作簿打开时,您的大表已经在内存中。用powerquery读取表并选择三列时,应该不会分配太多内存。

    【讨论】:

      【解决方案2】:

      Excel 或 Power Query 中可能存在问题。您看到 excel.exe 和 Microsoft.Mashup.Container.NetFX40.exe 进程使用了​​多少内存?

      直接从[Content]中删除列的唯一方法是修改Excel表格的实际数据。您可以尝试这样做,看看它是否会产生影响,但 Power Query 通常会尝试智能地仅加载它需要的列。

      如果您的查询使用大量内存,则以更有效的格式保存数据可能会提高性能(我会尝试 CSV)。无论如何,请尝试关闭“加载到工作表”,而只是加载到数据模型。

      【讨论】:

        【解决方案3】:

        您可以参考我的问答here

        您要做的是使用 Table.SelectColumns 方法而不是 Remove。

        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 现在也会显示一条错误/警告消息,其中包含此建议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-11
          相关资源
          最近更新 更多