پرش به مطلب اصلی

ذخیرهٔ یک کوئری

هدف​

یک پرسش را — «معامله‌های باز به تفکیک صنعتِ حساب، در این فصل» — زیر یک نام ذخیره کنید تا یک نمودار، یک گزارش، یک داشبورد و یک خروجی همگی همان پرسش را با نام بردنش بپرسند، به‌جای آنکه هرکدام نسخهٔ خودشان را حمل کنند.

چرا چنین چیزی هست​

نسخه‌های یک پرسش از هم دور می‌شوند. کسی فیلتر نمودار را سخت‌گیرانه‌تر می‌کند و گزارش را نه؛ شش ماه بعد آن دو چهار درصد اختلاف دارند و هیچ‌کس نمی‌تواند بگوید کدام درست است، چون هر کدام در جای خودش کاملاً درست به نظر می‌رسد.

کوئری ذخیره‌شده یک تعریف دارد. یک‌بار اصلاحش کنید و هر چیزی که به نامش ارجاع می‌دهد اصلاح می‌شود — از جمله در محیط آزمون و تولید، در واردسازی بعدی راه‌حل، چون کوئری ذخیره‌شده مانند یک جدول یا یک فرم همراه راه‌حل جابه‌جا می‌شود.

این یک پرسش است، نه دسترسی به پاسخ. هرکس کوئری ذخیره‌شده‌ای را اجرا کند دقیقاً همان چیزی را می‌بیند که مجوزهای خودش اجازه می‌دهند، درست مانند فهرستی از همان رکوردها. ذخیرهٔ یک کوئری دسترسی شما را به کسی قرض نمی‌دهد، و نشانه‌رفتن کوئری به جدولی که کسی نمی‌تواند بخواند، به او اجازهٔ خواندن نمی‌دهد.

پیش‌نیازها​

  • به‌عنوان سازنده وارد شده‌اید و راه‌حل و محیطی برگزیده‌اید.
  • جدول‌هایی که کوئری می‌خواند از پیش در آن محیط وجود دارند.

گام‌ها​

  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 بسنجید.
  • پیش‌نمایش می‌گوید اجازهٔ خواندن جدول را ندارید. — نمی‌توانید کوئری‌ای را ذخیره کنید که خودتان نمی‌توانید اجرا کنید؛ این عمدی است، چون کوئری‌ای که نمی‌توانید اجرا کنید کوئری‌ای است که نمی‌توانید بیازمایید. از مدیر بخواهید دسترسی خواندن جدول‌های درگیر را بدهد.
  • کوئری گروهی عددهای بیش‌ازحد بزرگ برمی‌گرداند. — پیوند در جهت یک‌به‌چند سطر والد را به ازای هر تطابق تکرار می‌کند و جمع‌ها تکرارها را می‌شمارند. دنبال‌کردن یک لوکاپ (حالت معمول) چنین نمی‌کند؛ پیوند زدن به یک جدول فرزند می‌کند.

سناریوهای مرتبط​