إنتقل إلى المحتوى الرئيسي

حفظ استعلام

الهدف​

احفظ سؤالًا — «الصفقات المفتوحة بحسب قطاع الحساب، هذا الربع» — تحت اسم، ليسأل الرسمُ والتقريرُ ولوحةُ المعلومات والتصديرُ السؤالَ نفسه بذكر اسمه، بدل أن يحمل كلٌّ منها نسخته.

لماذا وُجد هذا​

نسخ السؤال تتباعد. يشدّ أحدهم تصفية الرسم ولا يشدّ تصفية التقرير؛ وبعد ستة أشهر يختلف الاثنان بأربعة في المئة ولا يستطيع أحد أن يقول أيهما الصواب، لأن كلًّا منهما يبدو صحيحًا تمامًا في موضعه.

للاستعلام المحفوظ تعريف واحد. صحّحه مرة يُصحَّح كل ما يشير إليه — بما في ذلك في بيئتي الاختبار والإنتاج عند الاستيراد التالي للحل، لأن الاستعلام المحفوظ ينتقل مع الحل كأي جدول أو نموذج.

إنه سؤال، لا وصولٌ إلى إجابة. فمن يشغّل استعلامًا محفوظًا يرى بالضبط ما تسمح به صلاحياته هو، تمامًا كما في قائمة السجلات نفسها. حفظُ استعلام لا يُعير أحدًا وصولَك، وتوجيهُ استعلام إلى جدول لا يستطيع أحدهم قراءته لا يمنحه قراءته.

المتطلبات​

  • أنت مسجَّل الدخول بدور صانع، وقد اخترت حلًّا وبيئة.
  • الجداول التي يقرؤها الاستعلام موجودة في تلك البيئة.

الخطوات​

  1. افتح حلّك واختر الاستعلامات المحفوظة.

  2. اختر جديد. يُفتح مصمّم الاستعلامات في صفحة خاصة به.

  3. أعطه اسمًا معروضًا — ويملأ الاسم المنطقي نفسه بنفسه وأنت تكتب.

  4. اكتب وصفًا قصيرًا. فمن يوجّه لوحة معلومات إلى هذا الاستعلام لاحقًا ليس أنت غالبًا، والاسم نادرًا ما يقول أي السجلات يستبعدها الاستعلام.

  5. ابنِ الاستعلام. بسيط هو جدول وأعمدته وتصفية وترتيب؛ ومتقدّم يضيف الجداول المرتبطة والتجميع بالمقاييس والخيارات؛ وJSON هو المستند نفسه. والثلاثة عروض لاستعلام واحد، فلا يمكن أن تتعارض. ويشرحها كلها تصميم استعلام.

    وأصغر مستند مفيد يسمّي جدولًا ولا شيء غيره:

    {
    "entity": "par_deal"
    }

    والشكل الكامل في مخطط parsware-query@1، وهو نفسه ما تعطيه لمساعد ذكاء اصطناعي تطلب منه كتابة واحد لك.

  6. اختر حفظ. تفحص المنصة ثلاثة أمور: سلامة شكل المستند، وأنه استعلام صالح، وأنه يعمل هنا فعلًا — كل حقل وارتباط وتجميع ومقياس مقابل جداول هذه البيئة الحقيقية. فحقلٌ مكتوب خطأً يُرفض الآن ومنك، لا يكتشفه لاحقًا من يفتح لوحة المعلومات.

  7. اختر معاينة لتشغيله ورؤية ما يعود — من المصمّم، أو من القائمة مع تحديد الاستعلام.

شكلان: سجلات أو مجموعات​

وجود كتلة aggregate في المستند من عدمه هو الفارق كله، ويقول عمود المخرجات في القائمة أيَّهما كل استعلام.

سجلات — صفحة من الصفوف المطابقة، وهو ما تريده شبكة أو تصدير:

{
"entity": "par_deal",
"select": ["par_name", "par_amount"],
"filter": {
"connector": "And",
"conditions": [
{ "field": "par_status", "operator": "Equals", "value": "Open" }
]
},
"order": [{ "field": "par_amount", "descending": true }]
}

مجموعات — مجاميع، وهو ما يريده رسمٌ أو بطاقة مؤشر. وهذا المثال يربط أيضًا، وهو ما يستطيعه الاستعلام ولا تستطيعه العروض: يقرأ عمودًا من حساب الصفقة.

{
"entity": "par_deal",
"links": [
{
"alias": "acct",
"entity": "par_account",
"from": "par_accountid",
"to": "id",
"kind": "outer"
}
],
"aggregate": {
"groupBy": [{ "field": "acct.par_industry" }],
"measures": [{ "alias": "revenue", "function": "Sum", "field": "par_amount" }]
},
"order": [{ "field": "revenue", "descending": true }],
"top": 10
}

ومتى ارتبط جدول تحت اسم مستعار، صارت أعمدته تُسمّى alias.column في المستند كله — في التصفيات والتجميعات والمقاييس والترتيبات سواء.

ويُفحص كل جدول مرتبط بحقّه. فإن كنت تقرأ الصفقات دون الحسابات رُفض هذا الاستعلام بدل أن يسلّمك أعمدة الحسابات بهدوء؛ وإن كنت تقرأ بعض الحسابات فقط رأيت كل الصفقات، وما لا يحق لك منها غير ملحق بها.

استعمال استعلام محفوظ​

كل ما يشغّل استعلامًا يستطيع أن يسمّي هذا بدل أن يملك نسخته — وكذلك تطبيق أو عنصر تحكّم مكتوب يدويًا، عبر runtime.data.runSavedQuery("par_revenue_by_industry").

وما يشغّله يستطيع أن يضيّقه — أن يضيف تصفية، أو يطلب صفحة بعينها، أو يختار منطقة زمنية لتجميع التواريخ — لكنه لا يستطيع تغيير ما يقرؤه الاستعلام أو يربطه أو يقيسه. والتصفية المضافة تُجمع مع تصفيتك لا تحلّ محلّها، فالاستعلام الذي يستبعد الطلبات الملغاة يظل يستبعدها كيفما استُعمل.

الاسم لا يتغير​

الاسم المنطقي هو ما يخزّنه كل رسم وتقرير ولوحة معلومات، فتغييره يكسرها جميعًا دفعةً واحدة وبصمت. أما ما عداه — الاسم المعروض والوصف والمستند كله، بل والجدول الذي يقرؤه — فتغيّره متى شئت.

نقله بين البيئات​

الاستعلام المحفوظ مكوّن من مكوّنات الحل، مصنّف تحت الجدول الذي يقرؤه. أضِفه إلى حلّك من قائمة إدارة المكوّنات لذلك الجدول (تجده تحت الاستعلامات المحفوظة) ليُصدَّر ويُستورد مع الباقي. وعند الاستيراد يُفحص أمام جداول البيئة الهدف كما فُحص هنا.

وإلغاءُ تثبيت الحل يأخذ استعلاماته المحفوظة معه. وكل ما بقي في مكان آخر يشير إلى أحدها يتوقف بالاسم، وهي النتيجة الصادقة — فالسؤال كان ملكًا للحل الذي رحل.

حل المشكلات​

  • «مستند الاستعلام ليس JSON صالحًا.» — فاصلة أو قوس ناقص. المربع لا يعيد تنسيق ما تكتب، فما تراه هو ما أُرسل.
  • «على الاستعلام المحفوظ أن يسمّي الجدول الذي يقرؤه.» — أضِف "entity": "your_table". وهو اختياري حين ترسل الشاشةُ الاستعلام (فهي تعرف الجدول) وإلزامي هنا، لأن الاستعلام المحفوظ يُوجد بالاسم وحده.
  • «حقل غير معروف …» — الاسم مكتوب خطأً، أو هو لجدول مرتبط ويحتاج اسمه المستعار أمامه (acct.par_industry لا par_industry).
  • «لم تربط ذلك الجدول» — حقلٌ مؤهَّل باسم مستعار لا يعلنه أي ارتباط. راجع إملاء الاسم المستعار في قائمة links.
  • المعاينة تقول إنك لا تملك قراءة الجدول. — لا تستطيع حفظ استعلام لا تستطيع تشغيله؛ وهذا مقصود، فالاستعلام الذي لا تستطيع تشغيله استعلامٌ لا تستطيع اختباره. اطلب من مسؤول صلاحية القراءة على الجداول المعنية.
  • استعلام مجمَّع يعيد أرقامًا أكبر مما ينبغي. — الارتباط في اتجاه واحد-إلى-متعدد يكرّر صف الأب مرة لكل مطابقة، فتعدّ المجاميعُ التكرارات. وتتبّعُ بحثٍ (وهي الحالة المعتادة) لا يفعل ذلك؛ أما الارتباط إلى جدول ابن ففاعل.

سيناريوهات ذات صلة​