2016-04-06 2 views
0

У меня есть файл данных, содержащий около 400 столбцов. Мне нужно импортировать эти данные в PowerPivot. Чтобы уменьшить размер моего файла, я хотел бы использовать PowerQuery для создания 2 разных итоговых строк , а затем удалять все ненужные столбцы при загрузке.Совокупность строк на основе имени столбца в PowerQuery

В то время как моя первая строка общая колонка (RowTotal1) будет суммировать все 400 столбцов, я также хотел бы второй строка общую (RowTotal2), который вычитает из RowTotal1 любого столбца, имя которого содержит текст «нажмите кнопку» в нем.

Во-вторых, я хотел бы использовать значение в столбце Country как переменную, чтобы также вычесть любой столбец, содержащий этот var. например

Сайт ---- Страна ---- Col1 ---- Col2 ---- ClickCol1 ---- Col3 ---- Германия - --- RowTotal1 ---- RowTotal2

1а -------- США ---------- 2 --------- 4-- --------- 8 ------------ 16 ---------- 24 -------------- 54- -------------- 46 ----- -

2a ----- Германия ------- 2 --------- 4 ----------- 8 ------- ----- 16 ---------- 24 -------------- 54 --------------- 22-- -----

RowTotal1 = 2 + 4 + 8 + 16 + 24

RowTotal2 (первая строка) = 54 - 8 (ClickCol1)

RowTotal2 (вторая строка) = 54 - 24 (Германия) - 8 (ClickCol1)

Возможно ли это? (EDIT: Да. См ответ ниже)

REVISED ВОПРОС: Есть ли больше памяти эффективный способ сделать, чем пытаться сгруппировать 300+ миллионов строк за один раз?

ответ

1

код будет выглядеть примерно так:

let 
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Site", type text}, {"Country", type text}, {"Col1", Int64.Type}, {"Col2", Int64.Type}, {"ClickCol1", Int64.Type}, {"Col3", Int64.Type}, {"Germany", Int64.Type}}), 
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Country", "Site"}, "Attribute", "Value"), 
    #"Added Conditional Column" = Table.AddColumn(#"Unpivoted Other Columns", "Value2", each if [Country] = [Attribute] or [Attribute] = "ClickCol1" then 0 else [Value]), 
    #"Grouped Rows" = Table.Group(#"Added Conditional Column", {"Site", "Country"}, {{"RowTotal1", each List.Sum([Value]), type number},{"RowTotal2", each List.Sum([Value2]), type number}}) 
in 
    #"Grouped Rows" 

Но поскольку у вас есть много столбцов, я должен объяснить шаги:

  • (если у вас есть эти в файле Excel) Импорт их to Power Query
  • Выберите столбцы «Сайт» и «Страна» (с помощью Ctrl), щелкните правой кнопкой мыши> Unpivot Другие столбцы
  • Добавить столбец с помощью этой формулы (возможно, вам придется использовать Ad Vanced Editor): Таблица.AddColumn (# «Unpivoted Other Columns», «Value2», каждый, если [Страна] = [Атрибут] или [Атрибут] = «ClickCol1», затем 0 else [Значение])
  • Выберите столбцы «Страна и страна», щелкните правой кнопкой мыши> Группа по
  • Сделать это выглядит следующим образом: enter image description here
+0

Эй спасибо за ответ. Только что пришел к такому же выводу и собирался обновить сообщение. Единственная проблема, с которой я столкнулся, состоит в том, что она не имеет значения, каждый месяц содержит около 16 миллионов строк. В целом, мой анализ данных составляет около 24 месяцев. В то время как PowerQuery быстро раскручивается, группируется около 380 миллионов строк на 6 столбцов. Я проголосую за ваш ответ, так как технически он отвечает на вопрос, но оставит ответ нерешенным, поскольку я надеюсь на более эффективный способ памяти. (Excel x64 с 8Gb RAM) – Chris

+0

Я не уверен, что это можно сделать быстрее. Возможно, вы можете определить функцию, которая будет делать это, но будет иметь некоторые фильтры. Или вы можете группировать вещи на более крупном шаге, чтобы сделать внутренние шаги меньше. Например, вы можете группировать строки на внешнем уровне для каждого месяца, например? –

+0

(вы бы выбрали операцию «Все строки», когда вы группируете месяцы на внешней стороне) –

Смежные вопросы