TOP

Reorganización de tablas (Unpivot) en LibreOffice Calc

YLC Utilities logo

Descripción

A veces es necesario convertir una tabla transversal (pivotante) en una plana. Este procedimiento se llama " enderezamiento de datos " (unpivot data) . Como resultado de tal " Alisar "obtenemos una tabla donde todos los datos similares están en una columna.

El programa LibreOffice Calc no tiene una funcionalidad estándar para convertir tablas dinámicas a " departamento ", pero puedes escribir tú mismo el procedimiento correspondiente. Veamos cómo hacerlo.



Miremos la imagen a continuación para comprender más claramente la esencia del problema. A la izquierda tenemos una tabla en forma de matriz (tabla dinámica) y a la derecha, una tabla normal con columnas (tabla plana):

Cuando expandes una tabla, descomprimes el par atributo-valor que es la intersección de las columnas en la tabla de matriz y las reorientas en las columnas aplanadas en la tabla plana:

  • Valor (Values) (azul a la izquierda) expandirse a una nueva columna (azul a la derecha);
  • Atributos (Attributes) (verde a la izquierda) también se expanden en una nueva columna (verde a la derecha) y se duplican de acuerdo con la nueva columna de valores.
  • Código StarBASIC para el procedimiento UnPivotTable

    Abra el menú Tools - Macros - Edit Macros..., seleccione Module1 y copie el siguiente texto en el módulo:

    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
      
      ' Agregar una nueva hoja 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Determinar el tamaño de los encabezados. 
      iTopLabelRowCount  = InputBox(" ¿Cuántas líneas hay en el encabezado superior? ")
      iSideLabelColCount = InputBox(" ¿Cuántas columnas hay en el encabezado 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
    

    Luego, cierre Macro Editor y regrese a su hoja de trabajo en LibreOffice Calc. Seleccione toda la tabla con los encabezados superior e izquierdo y ejecute nuestra nueva macro a través del menú Tools - Macros - Run Macro...

    La macro insertará una nueva hoja con nombre en su libro de trabajo. "UnPivoted Table" y luego agregue una tabla en el nuevo formato. Con una tabla de este tipo puedes hacer cualquier análisis en LibreOffice Calc.

    Usando la extensión

    También puedes usar la utilidad. "Tabla dinámica (Unpivot)" instalando la extensión YLC_Utilities.oxt .

    Después de eso, esta utilidad estará disponible en todos los archivos que se abrirán en LibreOffice Calc.

    Artículos sobre el tema:

  • Reorganización de tablas (Unpivot) en Excel