TOP

LibreOffice Calc'deki tabloların (Unpivot) yeniden düzenlenmesi

Tanım

Bazen çapraz (pivot) bir tabloyu düz bir tabloya dönüştürmeye ihtiyaç duyulur. Bu prosedüre " denir veri düzeltmesi " (unpivot data) . Bunun sonucunda" doğruluk "tüm benzer verilerin tek bir sütunda olduğu bir tablo elde ediyoruz.

LibreOffice Calc programı pivot tabloları "'e dönüştürmek için standart bir işlevselliğe sahip değildir doğru ", ancak ilgili prosedürü kendiniz yazabilirsiniz. Nasıl yapılacağını görelim.



Sorunun özünü daha net anlamak için aşağıdaki resme bakalım. Solda matris şeklinde bir tablomuz var (pivot tablo) ve sağda sütunlu normal bir tablo (düz tablo):

Bir tabloyu genişlettiğinizde, matris tablosundaki sütunların kesişme noktası olan nitelik-değer çiftini paketinden çıkarırsınız ve bunları düz tablodaki düzleştirilmiş sütunlara yeniden yönlendirirsiniz:

  • Değer (Values) (solda mavi) yeni bir sütuna genişler (sağda mavi);
  • Öznitellikler (Attributes) (solda yeşil) ayrıca yeni bir sütuna (sağda yeşil) genişletilir ve yeni değer sütununa göre kopyalanır.
  • UnPivotTable prosedürü için BASIC kodu

    Tools - Macros - Edit Macros... menüsünü açın, Module1'yi seçin ve aşağıdaki metni modüle kopyalayın:

    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
      
      ' Yeni bir sayfa ekle 
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      ' Başlıkların boyutunu belirleyin 
      iTopLabelRowCount  = InputBox(" Üst başlıkta kaç satır var? ")
      iSideLabelColCount = InputBox(" Yan başlıkta kaç sütun var? ")
                
      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
    

    Ardından, Macro Editor'u kapatın ve LibreOffice Calc'deki çalışma sayfanıza dönün. Üst ve sol başlıklarla birlikte tablonun tamamını seçin ve yeni makromuzu Tools - Macros - Run Macro... menüsü aracılığıyla çalıştırın.

    Makro, çalışma kitabınıza yeni bir adlandırılmış sayfa ekleyecektir "UnPivoted Table" ve ardından yeni biçimde bir tablo ekleyin. Böyle bir tabloyla LibreOffice Calc'de her türlü analizi yapabilirsiniz.

    Konuyla ilgili makaleler:

  • Excel'deki tabloların (Unpivot) yeniden düzenlenmesi