TOP

إعادة تنظيم الجداول (Unpivot) في LibreOffice Calc

وصف

في بعض الأحيان تكون هناك حاجة لتحويل الجدول المتقاطع (المحوري) إلى جدول مسطح. يُسمى هذا الإجراء "تسوية البيانات" (unpivot data). نتيجة لهذا "التقويم" نحصل على جدول توجد فيه جميع البيانات المماثلة في عمود واحد.

لا يحتوي برنامج LibreOffice Calcbl_ على وظيفة قياسية لتحويل الجداول المحورية إلى "مسطحة"، ولكن يمكنك كتابة الإجراء المقابل بنفسك. دعونا نفكر في كيفية القيام بذلك.



دعونا نلقي نظرة على الصورة أدناه لفهم جوهر المشكلة بشكل أكثر وضوحًا. على اليسار لدينا جدول على شكل مصفوفة (جدول محوري)، وعلى اليمين - جدول عادي ذو أعمدة (جدول مسطح):

عندما تقوم بتوسيع جدول، فإنك تقوم بفك ضغط زوج قيمة السمة الذي يمثل نقطة تقاطع الأعمدة في جدول المصفوفة وإعادة توجيهها إلى الأعمدة المسطحة في الجدول المسطح:

  • يتم توسيع القيم (Values) (الأزرق على اليسار) إلى عمود جديد (الأزرق على اليمين)؛
  • يتم أيضًا توسيع السمات (Attributes) (الأخضر على اليسار) إلى عمود جديد (الأخضر على اليمين) وتكرارها وفقًا لعمود القيم الجديد.
  • رمز BASIC لإجراء UnPivotTable

    افتح القائمة 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.

    مقالات حول الموضوع:

  • إعادة ترتيب الجداول (Unpivot) في Excel