Power Query в Excel для выбора определенных ячеек из столбца

Я использую Power Query в Excel для ссылки на таблицу в той же книге. Я хочу выбрать определенные столбцы в этой таблице. Я знаю, что это можно сделать, загрузив таблицу в 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] исходной операции?

Спасибо.


person MarkO    schedule 01.09.2015    source источник


Ответы (3)


Это может быть очень простая попытка, но почему бы не добавить рабочий лист «DataTransfer», где вы устанавливаете только ссылки на нужные столбцы, и читаете эту небольшую таблицу с помощью мощного запроса?

Если ваши столбцы расположены близко друг к другу, вы также можете установить именованный диапазон и читать только этот диапазон с помощью powerquery.

Но в любом случае, когда рабочая книга открыта, ваша большая таблица уже находится в памяти. При чтении таблицы с помощью powerquery и выборе трех столбцов не должно быть много памяти.

person Gerd    schedule 02.09.2015

Возможно, возникла проблема в Excel или Power Query. Какой объем памяти используется процессами excel.exe и Microsoft.Mashup.Container.NetFX40.exe?

Единственный способ напрямую удалить столбцы из [Content] - это изменить фактические данные таблицы Excel. Вы можете попробовать это, чтобы увидеть, имеет ли это значение, но Power Query обычно старается с умом загружать только те столбцы, которые ему нужны.

Если ваш запрос использует много памяти, вы можете получить производительность, сохраняя данные в более эффективном формате (я бы попробовал CSV). В любом случае попробуйте отключить «загрузку на лист» и вместо этого просто загрузить в модель данных.

person Carl Walsh    schedule 01.09.2015

Вы можете обратиться к моему вопросу и ответить здесь.

Что вам нужно сделать, так это использовать метод 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

При просмотре необработанного sql с помощью Express Profiler это будет сделано в одном операторе, где

SELECT
       $Table.Name,
       $Table.Representative,
       $Table.Status,
       $Table.DateLastModified, 
       $Table.UserLastModified,
       $Table.ExtractionDate
FROM
       Sales.vDimCustomer as $Table

PowerBi и Power Query теперь также будут отображать сообщение об ошибке / предупреждении с этой рекомендацией при попытке импортировать большое количество столбцов.

person Jay Killeen    schedule 29.01.2016