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.
  • BASIC-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
      ' 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.

    Artikel zum Thema:

  • Reorganisation von Tabellen (Unpivot) in Excel