TOP

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

وصف

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

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



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

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

  • قيمة (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