TOP
Reorganisation von Tabellen (Unpivot) in LibreOffice Calc
Beschreibung
Manchmal besteht die Notwendigkeit, einen Kreuztisch (Pivottisch) in einen flachen Tisch umzuwandeln. Dieses Verfahren heißt „ Datenbegradigung " (unpivot data) . Als Ergebnis einer solchen „ Richten „Wir erhalten eine Tabelle, in der sich alle ähnlichen Daten in einer Spalte befinden.
Das Programm LibreOffice Calc verfügt nicht über eine Standardfunktionalität zum Konvertieren von Pivot-Tabellen in „ Wohnung ", aber Sie können die entsprechende Prozedur selbst schreiben. Mal sehen, wie es geht.
Schauen wir uns das Bild unten an, um den Kern des Problems besser zu verstehen. Links haben wir eine Tabelle in Form einer Matrix (Pivot-Tabelle) und rechts eine reguläre Tabelle mit Spalten (flache Tabelle):
Wenn Sie eine Tabelle erweitern, entpacken Sie das Attribut-Wert-Paar, das den Schnittpunkt der Spalten in der Matrixtabelle darstellt, und richten es in den abgeflachten Spalten der flachen Tabelle neu aus:
Wert (Values) (blau links) in eine neue Spalte erweitern (blau rechts);
Attribute (Attributes) (links grün) werden ebenfalls in eine neue Spalte (rechts grün) erweitert und entsprechend der neuen Wertespalte dupliziert.
StarBASIC-Code für die UnPivotTable-Prozedur
Öffnen Sie das Menü Tools - Macros - Edit Macros..., wählen Sie Module1 aus und kopieren Sie den folgenden Text in das Modul:
- Sub UnPivotTable
-
- Dim oBook As Object
- Dim oActiveSheet As Object
- Dim oSelRange As Object
- Dim oNewSheet As Object
-
- Dim i As Long
- Dim iTopLabelRowCount As Integer
- Dim iSideLabelColCount As Integer
-
- oBook = ThisComponent
- oActiveSheet = oBook.CurrentController.ActiveSheet
- oSelRange = oBook.CurrentSelection
-
-
- oBook.Sheets.insertNewByName("UnPivoted Table",0)
- oNewSheet = oBook.Sheets(0)
-
-
- iTopLabelRowCount = InputBox(" Wie viele Zeilen enthält die obere Kopfzeile? ")
- iSideLabelColCount = InputBox(" Wie viele Spalten enthält die Seitenkopfzeile? ")
-
- i = 0
-
- For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
- For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
-
- For j = 1 To iSideLabelColCount
- oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
- Next j
-
- For k = 1 To iTopLabelRowCount
- oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
- Next k
-
- oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
- i = i + 1
-
- Next c
- Next r
- End Sub
Sub UnPivotTable
' moonexcel.com.ua
Dim oBook As Object
Dim oActiveSheet As Object
Dim oSelRange As Object
Dim oNewSheet As Object
Dim i As Long
Dim iTopLabelRowCount As Integer
Dim iSideLabelColCount As Integer
oBook = ThisComponent
oActiveSheet = oBook.CurrentController.ActiveSheet
oSelRange = oBook.CurrentSelection
' Fügen Sie ein neues Blatt hinzu
oBook.Sheets.insertNewByName("UnPivoted Table",0)
oNewSheet = oBook.Sheets(0)
' Bestimmen Sie die Größe der Header
iTopLabelRowCount = InputBox(" Wie viele Zeilen enthält die obere Kopfzeile? ")
iSideLabelColCount = InputBox(" Wie viele Spalten enthält die Seitenkopfzeile? ")
i = 0
For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
For j = 1 To iSideLabelColCount
oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
Next j
For k = 1 To iTopLabelRowCount
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
Next k
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
i = i + 1
Next c
Next r
End Sub
Schließen Sie dann Macro Editor und kehren Sie zu Ihrem Arbeitsblatt in LibreOffice Calc zurück. Wählen Sie die gesamte Tabelle mit den oberen und linken Überschriften aus und führen Sie unser neues Makro über das Menü Tools - Macros - Run Macro aus...
Das Makro fügt ein neues benanntes Blatt in Ihre Arbeitsmappe ein "UnPivoted Table" , und fügen Sie dann eine Tabelle im neuen Format hinzu. Mit einer solchen Tabelle können Sie jede beliebige Analyse in LibreOffice Calc durchführen.
Verwendung der Erweiterung
Sie können das Dienstprogramm auch verwenden „Pivot-Tabelle (Unpivot)“ durch die Installation der Erweiterung YLC_Utilities.oxt .
Danach ist dieses Dienstprogramm in allen Dateien verfügbar, die in LibreOffice Calc geöffnet werden.
Artikel zum Thema:
Reorganisation von Tabellen (Unpivot) in Excel