عرض أو تصفية أفضل 10 في الجدول المحوري

سيناريوهات الاستخدام المحتملة

يصعب قراءة جدول محوري يسرد كل عنصر في حقل صف إذا احتوى الحقل على عشرات العناصر. يحتفظ تقرير «أفضل 10» بالعناصر الأعلى أو الأدنى ترتيبًا فقط، وهو ما تحتاجه تقارير الترتيب تحديدًا، مثل «أفضل 5 منتجات حسب الإيرادات» أو «أسفل 3 مناطق حسب عدد المبيعات». يدعم Aspose.Cells آليتين لذلك، تقابلان جيلين من Microsoft Excel.

  • العرض التلقائي في Excel 97-2003 — الطريقة PivotField.top10AutoShow(). هذا هو الإعداد الكلاسيكي «عرض أفضل N عناصر أو أسفل N عناصر» المخزن مباشرةً على حقل الجدول المحوري. يعمل في جميع إصدارات Excel، القديمة والجديدة، لأنه جزء من تنسيق الجدول المحوري الأصلي.
  • تصفية أفضل 10 في Excel 2007-365 — الطريقة PivotField.filterTop10(). هذا هو مرشح القيمة الحديث لأفضل 10 الموجود ضمن مرشحات القيم في قائمة الحقل. يُخزَّن في صورة كائن PivotFilter مرتبط بالحقل، ويتيح الترتيب استنادًا إلى عدد العناصر أو نسبتها المئوية.

عرض أفضل 10 في Excel 97-2003 (top10AutoShow)

يُهيَّأ العرض التلقائي الكلاسيكي باستدعاء واحد للطريقة PivotField.top10AutoShow(boolean isAutoShow, boolean isTop, int count, int rankBy):

  • isAutoShow — يتيح إعداد العرض التلقائي على الحقل أو يعطله.
  • isTop — إذا كان true، يتم الاحتفاظ بالعناصر الأعلى ترتيبًا (الأعلى)، وإذا كان false، يتم الاحتفاظ بالعناصر الأدنى (الأسفل).
  • count — عدد العناصر التي يجب الاحتفاظ بها، مثل 10 لتقرير كلاسيكي لأفضل 10.
  • rankBy — الفهرس بدءًا من الصفر لحقل البيانات الذي تُرتَّب العناصر وفق قيمه. مرّر -1 لترتيب العناصر وفق الحقل نفسه. يمكن أن يستند الترتيب إلى حقل قيمة أو إلى الحقل نفسه. توجد حالتان طبيعيتان، يوضحهما المثالان التاليان.

الترتيب حسب حقل قيمة

رتّب عناصر حقل الصف وفق حقل قيمة عادي مثل “Sum of Sales”. يبني المثال التالي جدولًا محوريًا فيه حقل صف واحد (Sport) وحقل بيانات واحد (Sales)، ثم يعرض أفضل رياضتين من حيث المبيعات. قيمة rankBy هي 0 لأن “Sum of Sales” هو حقل البيانات الموجود عند الفهرس 0.

import com.aspose.cells.*;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Sport");
worksheet.getCells().get("B1").putValue("Quarter");
worksheet.getCells().get("C1").putValue("Sales");
String[] sports = { "Golf", "Tennis", "Rugby", "Cricket", "Boxing" };
int row = 2;
for (String sport : sports)
{
    for (int quarter = 1; quarter <= 3; quarter++)
    {
        worksheet.getCells().get(row, 0).putValue(sport);
        worksheet.getCells().get(row, 1).putValue("Qtr" + quarter);
        worksheet.getCells().get(row, 2).putValue(1000 + 777 * row);
        row++;
    }
}
PivotTable pivotTable = worksheet.getPivotTables().add("A1:C16", 2, 5);
pivotTable.addFieldToArea(PivotFieldType.ROW, "Sport");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Sales");
pivotTable.calculateData();
PivotField sportField = pivotTable.getRowFields().get(0);
// إظهار أفضل عنصرين مصنفين حسب "Sum of Sales" (فهرس حقل البيانات 0)
sportField.top10AutoShow(true, true, 2, 0);
pivotTable.calculateData();
workbook.save("output-top10-by-value-field.xlsx");

الترتيب حسب الحقل نفسه

يمكن ترتيب الحقل وفق نفسه أيضًا — مرر -1 كقيمة لـ rankBy. لا يتطلب هذا الأسلوب حقل بيانات إضافيًا؛ يكفي أن يوضع الحقل في منطقة الصفوف (أو الأعمدة). يوضح المثال التالي أدنى 3 رياضات مرتبة وفق الحقل نفسه. عند حفظ هذا الإعداد، لا تُدرج سمة rankBy في XML للجدول المحوري لأن -1 هي القيمة الافتراضية للتنسيق، وتعيد Top10AutoShowSettings.getRankBy() إرجاع القيمة -1.

import com.aspose.cells.*;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Sport");
worksheet.getCells().get("B1").putValue("Quarter");
worksheet.getCells().get("C1").putValue("Sales");
String[] sports = { "Golf", "Tennis", "Rugby", "Cricket", "Boxing" };
int row = 2;
for (String sport : sports)
{
    for (int quarter = 1; quarter <= 3; quarter++)
    {
        worksheet.getCells().get(row, 0).putValue(sport);
        worksheet.getCells().get(row, 1).putValue("Qtr" + quarter);
        worksheet.getCells().get(row, 2).putValue(1000 + 777 * row);
        row++;
    }
}
PivotTable pivotTable = worksheet.getPivotTables().add("A1:C16", 2, 5);
pivotTable.addFieldToArea(PivotFieldType.ROW, "Sport");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Sales");
pivotTable.calculateData();
PivotField sportField = pivotTable.getRowFields().get(0);
// عرض آخر 3 عناصر مرتبة حسب الحقل نفسه (rankBy = -1)
sportField.top10AutoShow(true, false, 3, -1);
pivotTable.calculateData();
workbook.save("output-top10-by-field-itself.xlsx");

قراءة الخيارات الحالية (Top10AutoShowSettings)

تعيد الطريقة PivotField.getTop10AutoShowSettings() كائن PivotFieldTop10AutoShowSettings يتيح الوصول إلى خيارات العرض التلقائي المخزنة حاليًا على الحقل. استخدمه للاطلاع على كيفية عرض العناصر في مصنف موجود، أو في جدول محوري أعدت تهيئته للتو، بما في ذلك المصنفات المحمَّلة من ملف.

import com.aspose.cells.*;
Workbook workbook = new Workbook("output-top10-by-value-field.xlsx");
PivotTable pivotTable = workbook.getWorksheets().get(0).getPivotTables().get(0);
PivotField sportField = pivotTable.getRowFields().get(0);
PivotFieldTop10AutoShowSettings settings = sportField.getTop10AutoShowSettings();
System.out.println("AutoShow enabled: " + settings.isAutoShow());
System.out.println("Direction: " + (settings.isTop() ? "Top" : "Bottom"));
System.out.println("Item count: " + settings.getAutoShowCount());
System.out.println("Ranking data field index: " + settings.getRankBy());

تتوافق الخصائص الأربع مع سمات العرض التلقائي الكلاسيكية المكتوبة في XML للجدول المحوري (autoShow، topAutoShow، itemPageCount، rankBy)، ولذلك تعكس القيم المقروءة ما سطبقه جميع إصدارات Excel.

ملاحظة

Excel 2007-365: تصفية أفضل 10 (filterTop10)

تتيح إصدارات Excel الحديثة الوصول إلى أفضل 10 بوصفه مرشح قيمة في قائمة الحقل (مرشحات القيم، أفضل 10…). ويمثل Aspose.Cells هذا الخيار من خلال الطريقة PivotField.filterTop10(int valueFieldIndex, PivotFilterType type, boolean isTop, int itemCount)، التي تُرجع كائن PivotFilter الذي أُنشئ:

  • valueFieldIndex — الفهرس بدءًا من الصفر لحقل البيانات الذي تُرتَّب العناصر وفق قيمه المجمَّعة.
  • type — معنى itemCount. يحتفظ PivotFilterType.COUNT بعدد ثابت من العناصر (خيار «العناصر» في مربع الحوار). يحتفظ PivotFilterType.PERCENT بنسبة مئوية من العناصر، لذا تكون itemCount هي النسبة المئوية نفسها؛ أي أن قيمة 30 تحتفظ بأفضل 30 في المئة. يرتب PivotFilterType.SUM العناصر وفق التغطية التراكمية للقيم.
  • isTop — استخدم true للأعلى وfalse للأسفل.
  • itemCount — يمثل العدد N في «أفضل N»، وتعتمد وحدته على type.
import com.aspose.cells.*;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Sport");
worksheet.getCells().get("B1").putValue("Quarter");
worksheet.getCells().get("C1").putValue("Sales");
String[] sports = { "Golf", "Tennis", "Rugby", "Cricket", "Boxing" };
int row = 2;
for (String sport : sports)
{
    for (int quarter = 1; quarter <= 3; quarter++)
    {
        worksheet.getCells().get(row, 0).putValue(sport);
        worksheet.getCells().get(row, 1).putValue("Qtr" + quarter);
        worksheet.getCells().get(row, 2).putValue(1000 + 777 * row);
        row++;
    }
}
PivotTable pivotTable = worksheet.getPivotTables().add("A1:C16", 2, 5);
pivotTable.addFieldToArea(PivotFieldType.ROW, "Sport");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Sales");
pivotTable.calculateData();
PivotField sportField = pivotTable.getRowFields().get(0);
// مرشح أفضل 10 - احتفظ بأفضل عنصرين حسب "مجموع المبيعات" (فهرس حقل البيانات 0)
sportField.filterTop10(0, PivotFilterType.COUNT, true, 2);
// لمرشح قائم على النسبة بدلاً من ذلك، احتفظ بأفضل 30٪ من العناصر:
// sportField.filterTop10(0, PivotFilterType.PERCENT, true, 30);
pivotTable.getPivotCache().refresh();
pivotTable.calculateData();
workbook.save("output-top10-filter.xlsx");

مقالات ذات صلة