2016-04-06 18 views
0

Ich habe eine Datendatei mit ungefähr 400 Spalten darin. Ich muss diese Daten in PowerPivot importieren. Um meine Dateigröße zu reduzieren, möchte ich PowerQuery verwenden, um 2 verschiedene Zeilensummen zu erstellen und dann alle meine nicht benötigten Spalten nach dem Laden zu löschen.Zeilensummen basierend auf dem Spaltennamen in PowerQuery

Während meine erste Zeile Gesamt Spalte (RowTotal1) würde summiert alle 400 Spalten, würde ich wie auch eine zweite Reihe total (RowTotal2), die von RowTotal1 subtrahiert jede Spalte, deren Name enthält den Text „Klick“ drin.

Zweitens möchte ich den Wert in meiner Spalte Land als Variable verwenden, um auch jede Spalte zu subtrahieren, die diese Variable enthält. z.B.

Website ---- Land ---- Col1 ---- Col2 ---- ClickCol1 ---- Col3 ---- Deutschland - --- RowTotal1 ---- RowTotal2

1a -------- USA ---------- 2 --------- 4-- --------- 8 ------------ 16 ---------- 24 -------------- 54- -------------- 46 ----- -

2a ----- Deutschland ------- 2 --------- 4 ----------- 8 ------- ----- 16 ---------- 24 -------------- 54 --------------- 22-- -----

RowTotal1 = 2 + 4 + 8 + 16 + 24

RowTotal2 (erste Reihe) = 54-8 (ClickCol1)

RowTotal2 (zweite Reihe) = 54 - 24 (Deutschland) - 8 (ClickCol1)

Ist das möglich? (EDIT: Ja. Siehe unten antworten)

FRAGE revised: Gibt es einen Speicher effizienter als auf einmal zu einer Gruppe mehr als 300 Millionen Zeilen versuchen zu tun?

Antwort

1

-Code wie folgt aussehen würde:

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" 

Aber da Sie viele Spalten haben, sollte ich die Schritte erklären:

  • (Sie diese in Excel-Datei Unter der Annahme) importieren
  • Wählen Sie "Site" und "Country" -Spalten (mit Strg), rechte Maustaste> Andere Spalten aufheben
  • Spalte mit dieser Formel hinzufügen (möglicherweise müssen Sie Ad verwenden fortgeschrittener Editor): Tabelle.AddColumn (# "Unpivoted Other Columns", "Value2", jeweils wenn [Land] = [Attribut] oder [Attribut] = "ClickCol1" dann 0 else [Wert])
  • Wählen Sie Site und Country Spalten, Rechtsklick> Gruppe durch
  • es wie folgt aussehen: enter image description here
+0

Hey danke für die Antwort. Gerade zum selben Schluss gekommen und wollte die Post aktualisieren. Das einzige Problem, mit dem ich konfrontiert bin, ist die Tatsache, dass jeder Monat ungefähr 16 Millionen Zeilen enthält. Insgesamt hat meine Datenanalyse rund 24 Monate. Während PowerQuery schnell aufräumt, wird die Gruppierung von etwa 380 Millionen Zeilen um 6 Spalten überschritten. Ich werde Ihre Antwort abstimmen, da sie technisch die Frage beantwortet, aber die Antwort ungeklärt bleiben wird, da ich auf eine speichereffizientere Methode hoffe. (Excel x64 mit 8 GB RAM) – Chris

+0

Ich bin nicht sicher, dass es schneller erledigt werden kann. Vielleicht können Sie eine Funktion definieren, die dies tun wird, aber einige Filter haben wird. Oder Sie könnten Dinge in einem größeren Schritt gruppieren, um die inneren Schritte kleiner zu machen. Wie könnte man zum Beispiel die Zeilen auf einer äußeren Ebene für jeden Monat gruppieren? –

+0

(Sie würden "Alle Zeilen" Operation wählen, wenn Sie die Monate auf der Außenseite gruppieren) –

Verwandte Themen