TOP

LibreOffice Calc에서 테이블 재구성(Unpivot)

설명

때로는 교차(피벗) 테이블을 플랫 테이블로 변환해야 할 경우가 있습니다. 이 절차를 " 데이터 정리 " (unpivot data) . 그런 결과로 " 교정 " 유사한 데이터가 모두 하나의 열에 있는 테이블을 얻습니다.

LibreOffice Calc 프로그램에는 피벗 테이블을 " 효력 "이지만 해당 절차를 직접 작성할 수도 있습니다. 수행 방법을 살펴보겠습니다.



문제의 본질을 더 명확하게 이해하기 위해 아래 그림을 살펴 보겠습니다. 왼쪽에는 행렬 형태의 테이블(피벗 테이블)이 있고 오른쪽에는 열이 있는 일반 테이블(플랫 테이블)이 있습니다.

테이블을 확장할 때 행렬 테이블의 열 교차점인 속성-값 쌍의 압축을 풀고 플랫 테이블의 평면화된 열로 방향을 다시 지정합니다.

  • (Values) (왼쪽 파란색) 새 열로 확장됩니다(오른쪽 파란색).
  • 속성 (Attributes) (왼쪽 녹색)도 새 열(오른쪽 녹색)로 확장되고 새 값 열에 따라 복제됩니다.
  • UnPivotTable 프로시저에 대한 BASIC 코드

    Tools - Macros - Edit Macros... 메뉴를 열고 Module1을 선택한 후 다음 텍스트를 모듈에 복사합니다.

    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
      
      ' 새 시트 추가 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' 헤더 크기 결정 
      iTopLabelRowCount  = InputBox(" 상단 헤더에 몇 줄이 있나요? ")
      iSideLabelColCount = InputBox(" 측면 헤더에 몇 개의 열이 있나요? ")
                
      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
    

    그런 다음 Macro Editor을 닫고 LibreOffice Calc의 워크시트로 돌아갑니다. 상단 및 왼쪽 헤더가 있는 전체 테이블을 선택하고 Tools - Macros - Run Macro... 메뉴를 통해 새 매크로를 실행합니다.

    매크로는 통합 문서에 새 이름의 시트를 삽입합니다. "UnPivoted Table" 를 클릭한 다음 새 형식으로 테이블을 추가합니다. 이러한 테이블을 사용하면 LibreOffice Calc에서 모든 분석을 수행할 수 있습니다.

    주제에 관한 기사:

  • Excel의 표(Unpivot)