4.4أوامر SQL والتقارير متعددة المصادر
الأساسي في 30 ثانية
- أمر SQL = كتابة استعلامك الخاص : بدلا من ترك Crystal Reports يولّد، نكتب SELECT وFROM وWHERE وJOIN — يُنفَّذ كما هو كـ«جدول افتراضي».
- تحكم وأداء أقصى : وصلات دقيقة، وترشيحات وتجميعات مدفوعة جهة القاعدة — حاسم على الأحجام الكبيرة وللاستعلامات المعقدة (الاستعلامات الفرعية، وUNION).
- منعكس فارس : معاملات Crystal في الاستعلام للترشيح جهة الخادم ؛ وتقارير فرعية للمصادر المختلفة — ولا بيان اعتماد مثبت أبدا في الأمر.
mini-cas filé — فارس وأفضل العملاء جهة الخادم
فارس، مراقب تسيير في الجزائر، عليه إخراج رقم الأعمال حسب العميل للسنة المختارة : عبر الواجهة، يستقدم Crystal كل الأسطر ثم يجمّع — بطيء جدا على مئات آلاف الطلبات. يضيف أمر SQL يرشّح حسب السنة عبر معامل ويجمّع جهة القاعدة (GROUP BY)، فلا يستقدم إلا المجاميع. وللمصدر الثاني (ملف حسومات غير قابل للربط)، يُبقي تقريرا فرعيا مرتبطا (انظر 4.1). رابع محطة في الخيط الأحمر : فارس يُشغّل القاعدة لا محطة العميل.
تتمة الحالات 4.1-4.3 — ينتقل فارس من البصري إلى الأداء جهة القاعدة.
1. أمر SQL : الكتابة بدلا من النقر
للحاجات المتقدمة، أمر SQL (SQL Command) : بدلا من اختيار الجداول وترك Crystal Reports يولّد الاستعلام، نكتب استعلامنا الخاص (SELECT … FROM … WHERE … JOIN …) فيصبح مصدر التقرير، ويُنفَّذ كما هو كـ«جدول افتراضي». يُضاف في مساعد الاتصال.
الاستعمالات : تحكم كامل (وصلات، وترشيحات، وحسابات جهة القاعدة)، واستعلامات معقدة مستحيلة أو متعبة عبر الواجهة (وصلات متقنة، واستعلامات فرعية، وتجميعات SQL، وUNION، ودوال خاصة بالقاعدة)، والأداء (دفع العمل نحو القاعدة، المحسّنة لذلك، وعدم استقدام إلا النتيجة). ونُدمج فيه معاملات Crystal لترشيح تفاعلي يُنفَّذ جهة الخادم، مثل معامل السنة عند فارس.
2. التقارير متعددة المصادر : الاختيار حسب طبيعة المصادر
الجمع بين عدة أصول حسب الحالة. القاعدة نفسها ← وصلات كلاسيكية أو أمر SQL (عالي الأداء : تجمع القاعدة في استعلام واحد). مصادر مختلفة غير قابلة للربط (قاعدتان، قاعدة + ملف) ← تقارير فرعية (انظر 4.1)، وهي غالبا أفضل مقاربة : كل مصدر في تقريره، مرتبط بحقل مشترك.
يتيح Crystal Reports أيضا إضافة اتصالات متعددة في التقرير نفسه (تعدد الاتصالات)، لكن وصلات ما بين المصادر تتم أحيانا جهة العميل — مكلفة على الأحجام الكبيرة، تُحصر في الحالات الصغيرة. وللتركيبات المعقدة أو المتكررة أو الضخمة، الأصلب غالبا هو التوحيد مسبقا (عرضة قاعدة، وجدول تركيبي، وETL) ثم ربط التقرير بمصدر واحد.
3. الكفاءة والصيانة : ثمن التحكم
يتطلب أمر SQL إتقان SQL : يجب أن يكون الاستعلام صالحا ومحسّنا — فاستعلام سيئ يعطي تقريرا بطيئا أو خاطئا — وهو شيفرة تُصان (توثيق، وترقيم نسخ)، خلاف السحب والإفلات. وعند الشك، ابدأ بالواجهة ؛ وانتقل إلى أمر SQL فقط عند الاصطدام بحدٍّ.
هنا يلتقي إعداد التقارير بإتقان قواعد البيانات — قوي، لكنه متطلب في الكفاءات والصرامة. أمنيا : حساب قراءة فقط، ومعاملات بدلا من الدمج، ولا كلمة مرور مثبتة (انظر التنبيه أدناه).
🔎 مثال ملموس — 🔎 مثال ملموس — الترشيح جهة الخادم بـ SQL
أفضل عملاء فارس : معامل في الاستعلام، والتجميع جهة القاعدة.
SELECT client, SUM(montant) AS total
FROM commandes
WHERE annee = {?Annee}
GROUP BY client
← القاعدة ترشّح وتجمّع ؛ ويستقبل Crystal الحد الأدنى.
القراءة : WHERE مُعامَل + GROUP BY جهة القاعدة = لا تعبر إلا المجاميع.
الدرس : تحكم وأداء أقصى على الأحجام الكبيرة — استعلام صالح ومحسّن وموثق.
مفردات القسم
- أمر SQL (SQL Command)
- كتابة استعلام SQL الخاص (SELECT وFROM وWHERE وJOIN) كمصدر للتقرير، تُنفّذه القاعدة كما هو.
مثال بسيط: كتب فارس أفضل العملاء حسب السنة بدلا من ترك Crystal يولّد الاستعلام.
ما ليس كذلك: اختيار الجداول بالسحب والإفلات.
رد فعل: حدُّ الواجهة أو البطء : انتقل إلى أمر SQL.
- الترشيح جهة الخادم
- معاملات Crystal مدمجة في الاستعلام : ترشّح القاعدة وتجمّع، ولا يستقبل Crystal إلا النتيجة اللازمة.
مثال بسيط: السنة التي اختارها فارس ترشّح في WHERE الذي تُنفّذه القاعدة.
ما ليس كذلك: استقدام كل الأسطر ثم الترشيح في التقرير.
رد فعل: حجم كبير : WHERE مُعامَل + تجميع جهة القاعدة.
- التقارير متعددة المصادر
- الجمع بين عدة أصول : وصلات أو SQL (القاعدة نفسها)، وتقارير فرعية (مصادر مختلفة)، وتعدد اتصالات (وصلات جهة العميل، مكلفة).
مثال بسيط: فارس : أمر SQL لقاعدة الطلبات، وتقرير فرعي لملف الحسومات.
ما ليس كذلك: خلط كل شيء في اتصال واحد متعدد المصادر على أحجام كبيرة.
رد فعل: مصادر مختلفة غير قابلة للربط : أولا التقارير الفرعية.
- التوحيد مسبقا
- تحضير البيانات قبل Crystal (عرضة، وجدول تركيبي، وETL) ثم ربط التقرير بمصدر واحد — الأصلب للحالات الثقيلة.
مثال بسيط: طلب فارس إنشاء عرضة سنوية للمبيعات للتقارير المتكررة.
ما ليس كذلك: الجمع عند كل تنفيذ لأحجام غير متجانسة جهة العميل.
رد فعل: تركيبة معقدة أو متكررة : وحّد مرة، وأبلغ مرارا.
في التطبيق — عمليا — استخدام أمر SQL
- في مساعد الاتصال، أضف أمر SQL : اكتب استعلامك (SELECT … FROM … JOIN … WHERE …) — فيصبح مصدر التقرير.
- ادمج معاملات Crystal في الاستعلام لترشيح تفاعلي مدفوع جهة الخادم.
- تحقق من أن الاستعلام صالح ومحسّن (وصلات، وترشيحات، وتجميعات جهة القاعدة) ؛ واختبر النتيجة والأداء.
- لمصادر مختلفة غير قابلة للربط، فضّل التقارير الفرعية (4.1) على تعدد الاتصالات (وصلات جهة العميل مكلفة).
نص جاهز للقول — شرح أمر SQL لمديرية نظم المعلومات (30 ثانية)
«معك فارس : لأفضل العملاء السنوي، كتبت أمر SQL يرشّح حسب السنة ويجمّع جهة القاعدة — فلا نستقدم إلا المجاميع بدلا من مئات آلاف الأسطر. الاستعلام مختبَر وموثق، والتقرير يعمل بحساب قراءة فقط، دون كلمة مرور مثبتة.»
يُقال لاعتماد الوصول إلى القاعدة : اعرض الاستعلام والحساب المستخدم والكسب المقاس.
نموذج جاهز للنسخ — أمر SQL مُعامَل (صالح)
SELECT c.nom_client AS client,
SUM(l.montant) AS total
FROM clients AS c
INNER JOIN commandes AS l
ON l.id_client = c.id_client
WHERE l.annee = {?Annee}
GROUP BY c.nom_client
ORDER BY total DESC
أفضل العملاء السنوي
مثل فارس : WHERE على السنة المُعامَلة + GROUP BY جهة القاعدة — لا تعبر إلا المجاميع.
استعلام معقد (UNION)
الجمع بين SELECT متوافقين بـ UNION في الأمر عندما لا تتيحه الواجهة.
مصادر غير متجانسة
قاعدة من جهة، وملف من جهة أخرى : تقرير فرعي مرتبط بدلا من تعدد اتصالات مكلف.
حالة متكررة ضخمة
اطلب عرضة أو جدولا تركيبيا مسبقا : يرتبط التقرير بمصدر واحد وسريع.
✓ ممارسات جيدة
- ابدأ بالواجهة ؛ وانتقل إلى أمر SQL إذا اصطدمت بحدٍّ.
- ادفع الوصلات والترشيحات والتجميعات جهة القاعدة ؛ واستغل الفهارس.
- وحّد مسبقا (عرضة، وجدول) للتركيبات المعقدة أو الضخمة.
✗ أخطاء شائعة
- استعلام SQL مكتوب سيئا (تقرير بطيء أو خاطئ).
- تعدد الاتصالات على أحجام كبيرة (وصلات جهة العميل).
- نسيان أن أمر SQL شيفرة تُصان.
النقاط الأساسية
- أمر SQL = كتابة استعلامك الخاص كمصدر. تحكم وأداء أقصى : وصلات وترشيحات وتجميعات واستعلامات فرعية جهة القاعدة.
- الاستعمالات : استعلامات معقدة (استعلامات فرعية، وUNION، وتجميعات، ودوال)، وتحكم كامل، وأداء. معاملات مدمجة (ترشيح جهة الخادم).
- تعدد المصادر : وصلات أو SQL (القاعدة نفسها) ؛ وتقارير فرعية للمصادر المختلفة ؛ وتعدد اتصالات ممكن لكن الوصلات جهة العميل (مكلفة) ؛ والتوحيد مسبقا للحالات الثقيلة.
- يتطلب إتقان SQL (استعلام صالح ومحسّن) وهو شيفرة تُصان.
تحدّي 48 ساعة — طبّق غدا
حوّل تقريرا بطيئا : أعد كتابة مصدره كأمر SQL (ترشيح مُعامَل + تجميع جهة القاعدة)، وقِس الكسب ووثّق الاستعلام.
- أستطيع كتابة أمر SQL صالح ومحسّن بمعاملات.
- أستطيع اختيار المقاربة متعددة المصادر حسب طبيعة المصادر.
- أعمل بقراءة فقط، دون بيان اعتماد مثبت، واستعلام موثق.
أسئلة شائعة
متى أكتب أمر SQL بدلا من استخدام واجهة اختيار الجداول؟
الواجهة (الجداول + الروابط، ويولّد Crystal الاستعلام) ميسّرة ومرئية وسهلة الصيانة : الخيار الافتراضي لمعظم التقارير. اكتب أمر SQL من أجل : الاستعلامات المعقدة التي تديرها الواجهة سيئا (استعلامات فرعية، وUNION، وتجميعات متقدمة، ودوال خاصة)، والأداء الأقصى (دفع الوصلات والترشيحات والتجميعات إلى القاعدة — حاسم على الأحجام الكبيرة)، والتحكم الدقيق في الاستعلام. الشرط : إتقان SQL (استعلام صالح ومحسّن وموثق). وعند الشك، ابدأ بالواجهة وانتقل إلى SQL عند الاصطدام بحدٍّ.
كيف أجمع بين بيانات من عدة مصادر مختلفة؟
حسب طبيعة المصادر. القاعدة نفسها ← الوصلات أو أمر SQL : تجمع القاعدة في استعلام واحد (عالي الأداء). مصادر مختلفة غير قابلة للربط ← تقارير فرعية مرتبطة (كل مصدر في تقريره، مرتبط بحقل مشترك ؛ والأداء على مستوى المجموعة) أو تعدد اتصالات (يجمع Crystal جهة العميل — بطيء على الأحجام الكبيرة، للحالات الصغيرة فقط). وللتركيبات المعقدة أو المتكررة أو الضخمة، الأصلب هو التوحيد مسبقا (عرضة، وجدول تركيبي، وETL) ثم ربط تقرير بمصدر واحد.
ماذا يتيح أمر SQL مقارنة باختيار الجداول؟