TOP

Reorganizarea tabelelor (Unpivot) în LibreOffice Calc

Descriere

Uneori este nevoie să convertiți un tabel în cruce (pivot) într-unul plat. Această procedură se numește „ procesarea datelor " (unpivot data) . Ca urmare a unor astfel de " Directia " obținem un tabel în care toate datele similare sunt într-o coloană.

Programul LibreOffice Calc nu are o funcționalitate standard pentru conversia tabelelor pivot în " apartament ", dar puteți scrie singur procedura corespunzătoare. Să vedem cum se face.



Să ne uităm la imaginea de mai jos pentru a înțelege mai clar esența problemei. În stânga avem un tabel sub forma unei matrice (tabel pivot), iar în dreapta - un tabel obișnuit cu coloane (tabel plat):

Când extindeți un tabel, despachetați perechea atribut-valoare care este punctul de intersecție al coloanelor din tabelul matrice și le reorientați în coloanele aplatizate din tabelul plat:

  • Valoare (Values) (albastru pe stânga) extinde într-o nouă coloană (albastru pe dreapta);
  • Atribute (Attributes) (verde în stânga) sunt, de asemenea, extinse într-o nouă coloană (verde în dreapta) și duplicate în funcție de noua coloană de valori.
  • BASIC cod pentru procedura UnPivotTable

    Deschideți meniul Tools - Macros - Edit Macros..., selectați Module1 și copiați următorul text în 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
      
      ' Adăugați o foaie nouă 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Determinați dimensiunea antetelor 
      iTopLabelRowCount  = InputBox(" Câte linii în antetul de sus? ")
      iSideLabelColCount = InputBox(" Câte coloane în antetul lateral? ")
                
      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
    

    Apoi, închideți Macro Editor și reveniți la foaia de lucru în LibreOffice Calc. Selectați întregul tabel cu anteturile de sus și din stânga și rulați noua noastră macrocomandă prin meniul Tools - Macros - Run Macro...

    Macrocomanda va insera o nouă foaie cu nume în registrul de lucru "UnPivoted Table" , apoi adăugați un tabel în noul format. Cu un astfel de tabel puteți face orice analiză în LibreOffice Calc.

    Articole pe tema:

  • Reorganizera tabelelor (Unpivot) în Excel