TOP

Riorganizzazione delle tabelle (Unpivot) in LibreOffice Calc

Descrizione

A volte è necessario convertire una tabella a croce (pivot) in una tabella piatta. Questa procedura si chiama " raddrizzamento dei dati " (unpivot data) . In conseguenza di tale" raddrizzamento " otteniamo una tabella in cui tutti i dati simili sono in una colonna.

Il programma LibreOffice Calc non dispone di una funzionalità standard per convertire le tabelle pivot in " Piatto ", ma puoi scrivere tu stesso la procedura corrispondente. Vediamo come farlo.



Diamo un'occhiata all'immagine qui sotto per comprendere più chiaramente l'essenza del problema. A sinistra abbiamo una tabella sotto forma di matrice (tabella pivot) e a destra - una tabella normale con colonne (tabella piatta):

Quando espandi una tabella, decomprimi la coppia attributo-valore che è il punto di intersezione delle colonne nella tabella a matrice e le riorienti nelle colonne appiattite nella tabella piatta:

  • Valore (Values) (blu a sinistra) espande in una nuova colonna (blu a destra);
  • Attributi (Attributes) (verde a sinistra) vengono inoltre espansi in una nuova colonna (verde a destra) e duplicati in base alla nuova colonna di valori.
  • Codice BASIC per la procedura UnPivotTable

    Apri il menu Tools - Macros - Edit Macros..., seleziona Module1 e copia il seguente testo nel modulo:

    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
      
      ' Aggiungi un nuovo foglio 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Determina la dimensione delle intestazioni 
      iTopLabelRowCount  = InputBox(" Quante righe nell'intestazione superiore? ")
      iSideLabelColCount = InputBox(" Quante colonne nell'intestazione laterale? ")
                
      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
    

    Quindi chiudi Macro Editor e torna al foglio di lavoro in LibreOffice Calc. Seleziona l'intera tabella con le intestazioni in alto e a sinistra ed esegui la nostra nuova macro tramite il menu Tools - Macros - Run Macro...

    La macro inserirà un nuovo foglio con nome nella cartella di lavoro "UnPivoted Table" , quindi aggiungi una tabella nel nuovo formato. Con una tabella di questo tipo puoi eseguire qualsiasi analisi in LibreOffice Calc.

    Articoli sull'argomento:

  • Riorganizzazione delle tabelle (Unpivot) in Excel