مطالعه بیشتر
چه زمانی باید از عبارات سفارشی استفاده کنید و چرا باید از آنها در ویرایشگر notebook متابیس استفاده کنید.
آموزش: عبارات سفارشی
چه زمانی باید از عبارات سفارشی استفاده کنید و چرا باید از آنها در ویرایشگر notebook متابیس استفاده کنید.
به دنبال مستندات درباره عبارات سفارشی هستید؟ مستندات: فیلترهای فیلد را ببینید.
در ریاضیات، عبارات مجموعههایی از نمادها هستند که با هم یک مقدار را بیان میکنند. اگر قبلاً با نرمافزار spreadsheet کار کردهاید، عبارات فرمولها هستند، مثل =SUM(A1, B1).
عبارات سفارشی در query builder متابیس ابزارهای قدرتمندی هستند که میتوانند اکثریت قریب به اتفاق موارد استفاده تحلیل را بدون نیاز به بیرون آوردن SQL از toolbox پوشش دهند. در واقع، مزایای بزرگی برای استفاده از query builder وجود دارد که وقتی از SQL استفاده میکنید دریافت نمیکنید:
- Extensibility: استفاده از query builder برای ساخت پرسوجوها به مشتریان اجازه یادگیری از و ساخت روی سؤالهای شما بدون نیاز به دانستن هیچ SQL را میدهد.
- Drill-through به مشتریان اجازه break out رکوردها بر اساس دسته، zoom in، drill down به رکوردهای unaggregated، یا x-ray داده روی کلیک را میدهد. سؤالهای ساخته شده با query builder متابیس قدرت کامل drill-through را به کاربران میدهند، اما سؤالهای ساخته شده با استفاده از SQL فقط گزینههای محدود مثل فیلتر کردن بر اساس یک مقدار را نشان میدهند.
و همیشه میتوانید در هر نقطه در طول توسعه خود با تبدیل یک سؤال موجود به یک سؤال SQL بومی به SQL تغییر دهید.
سه مکان در query builder وجود دارد که میتوانیم از عبارات سفارشی استفاده کنیم:
- ستونهای سفارشی از توابع برای محاسبه مقادیر (مثل
+برای افزودن اعداد) یا دستکاری متن (مثلlowerبرای تغییر متن به lowercase) استفاده میکنند. - فیلترهای سفارشی از توابع مثل
containsکه به true یا false ارزیابی میشوند استفاده میکنند. - خلاصههای سفارشی از توابع مثل
countیاsumبرای aggregate کردن رکوردها استفاده میکنند.
ستونهای سفارشی
میتوانیم یک ستون سفارشی به داده خود با استفاده از یک عبارت برای محاسبه یک ستون جدید اضافه کنیم. بیایید یک عبارت را در عمل ببینیم. در اینجا جدول Orders از پایگاه داده نمونه شامل شده با متابیس است.

بگویید میخواهیم درصد تخفیف اعمال شده به سفارشها بر اساس subtotal قبل از مالیات را بدانیم. به عنوان مثال، اگر یک تخفیف 1 دلاری روی یک سفارش 10 دلاری دادیم، میخواهیم یک ستون ببینیم که نشان دهد آن سفارش را 10% تخفیف دادیم.
متأسفانه، یک اسکن سریع از ستونها در پیشنمایش به ما میگوید که پایگاه داده آن محاسبه را ذخیره نمیکند (یعنی ستون "discount percentage" وجود ندارد). فقط subtotal سفارش، و discount total را داریم.
با این حال، به لطف ریاضی، میتوانیم از discount total و order subtotal برای محاسبه درصد استفاده کنیم. اینجا جایی است که عبارات وارد بازی میشوند: میتوانیم از یک عبارت برای محاسبه درصد تخفیف برای هر ردیف استفاده کنیم، و آن مقدار محاسبه شده را در یک ستون جدید ذخیره کنیم.
بیایید نحوه ایجاد یک ستون سفارشی را مرور کنیم.
وقتی در query builder هستیم، Custom column را در بخش Data انتخاب میکنیم.
برای محاسبه درصد تخفیف، نیاز داریم تخفیف را بر total اصلی (Subtotal) تقسیم کنیم تا درصد تخفیف را دریافت کنیم.
در عبارات، از براکتها برای ارجاع به ستونها استفاده میکنیم. به عنوان مثال، میتوانیم به ستون Discount در جدول Orders به عنوان [Discount] ارجاع دهیم. اگر نیاز به ارجاع به ستون از جدول دیگر لینک شده توسط یک foreign key داریم، میتوانیم از . بین جدول و ستون استفاده کنیم، مثل [Table.Column] (به طور جایگزین میتوانید [Table → Column] را از منوی dropdown که وقتی یک براکت باز ([) تایپ میکنید ظاهر میشود انتخاب کنید). به عنوان مثال، میتوانستیم [Products.Category] را وارد کنیم که به: [Products → Category] resolve میشود.
برای حالا، فقط به ستونها در جدول Orders علاقهمندیم، پس نیاز به ارجاع به جدول دیگر نیست. در اینجا عبارت (یا فرمول) که برای محاسبه ستون درصد تخفیف سفارشی خود استفاده میکنیم:
[Discount] / [Subtotal]آن عبارت را در فیلد Expression وارد کنید، سپس به ستون جدید یک نام بدهید: Discount percentage.

Done را کلیک کنید، سپس روی دکمه Visualization کلیک کنید تا ستون جدید خود را ببینید.
از آنجایی که مقدار در ستون جدید Discount percentage مربوط به تخفیفها است، بیایید ستون را کنار ستون Discount حرکت دهیم. میتوانید ستونها را روی جداول با کلیک روی header ستون و drag کردن ستون به مکان هدف خود حرکت دهید، مثل این:

از آنجایی که یک درصد محاسبه میکنیم، بیایید فرمت را اصلاح کنیم تا خواندن راحتتر شود. روی heading Discount percentage کلیک کنید تا Action Menu برای ستون باز شود، سپس روی آیکون چرخدنده کلیک کنید تا ستون را فرمت کنید.
متابیس یک Sidebar Formatting با گزینهها slide میکند. بیایید style را به Percent تغییر دهیم، و تعداد مکانهای اعشار را به 2 bump up کنیم. و از آنجایی که عنوان Discount percentage فضای زیادی میگیرد، بیایید ستون را به Discount % rename کنیم.
گزینهای برای افزودن یک نمودار میلهای کوچک نیز وجود دارد. این نمودار میلهای درصد را نسبت به 100% نشان نمیدهد؛ در عوض نمودار میلهای کوچک درصد تخفیف را نسبت به درصد تخفیف داده شده به سفارشهای دیگر به ما نشان میدهد. بیایید نمودار میلهای کوچک را برای حالا خاموش بگذاریم.
در اینجا سؤال تمام شده ما با ستون Discount % اضافه شده:

فیلترهای سفارشی
متابیس با گزینههای فیلتر زیادی out of the box میآید، اما میتوانید فیلترهای پیچیدهتر با استفاده از عبارات فیلتر سفارشی طراحی کنید. اینها به خصوص برای ایجاد فیلترهایی که از statementهای OR استفاده میکنند مفید هستند، و این چیزی است که اینجا پوشش میدهیم.
به طور معمول در query builder، وقتی چندین فیلتر به سؤال خود اضافه میکنیم، متابیس به طور ضمنی فیلترها را با یک عملگر AND ترکیب میکند. به عنوان مثال، اگر یک فیلتر برای محصولاتی که با Enormous شروع میشوند و یک فیلتر برای محصولاتی که با Computer پایان مییابند اضافه کنیم، سؤال ما فقط محصولاتی که هم با Enormous شروع میشوند و با Computer پایان مییابند را برمیگرداند، که در پایگاه داده نمونه متابیس وجود ندارند.
برای فیلتر کردن محصولاتی که یا با Enormous شروع میشوند یا با Computer پایان مییابند، Custom Expression را از dropdown Filter انتخاب میکنیم، و از توابع startsWith و endsWith استفاده میکنیم:
startsWith(string1, string2)
endsWith(string1, string2)توابع startsWith و endsWith بررسی میکنند ببینند آیا string1 با/با string2 شروع/پایان مییابد. پس string1 رشتهای است که باید بررسی شود (haystack)، و string2 متنی است که باید جستجو شود (needle). و از آنجایی که میخواهیم محصولاتی که یا با Enormous شروع میشوند یا با Computer پایان مییابند را جستجو کنیم، میتوانیم از عبارات startsWith و endsWith با یک عملگر OR در بین آنها استفاده کنیم:
startsWith([Title], "Enormous") OR endsWith([Title], "Computer")مجموعه داده حاصل شامل محصولاتی که یا با Enormous شروع میشوند یا با Computer پایان مییابند خواهد بود:

توجه کنید که عبارات فیلتر سفارشی باید همیشه به true یا false resolve شوند. با این حال، میتوانید عباراتی که به true یا false resolve نمیشوند را در statementها nest کنید، مثل:
contains(concat([First Name], [Last Name]), "Wizard")چون بیرونیترین تابع (contains) به true یا false resolve میشود. در حالی که نمیتوانستید concat([First Name], [Last Name]) را به عنوان یک فیلتر استفاده کنید، چون به یک رشته متن resolve میشد (اگرچه میتوانستید از concat برای ایجاد یک ستون سفارشی مثل Full Name استفاده کنید).
خلاصههای سفارشی
عبارات سفارشی راههای مختلف زیادی برای aggregate کردن داده ما باز میکنند. بیایید تابع Share را در نظر بگیریم، که درصد ردیفها در داده که با شرط match میکنند را به عنوان یک اعشار برمیگرداند. به عنوان مثال، بگویید میخواهیم درصد کل محصولات کاغذی در خط محصول خود را بدانیم، یعنی چه share از خط محصول ما از محصولات کاغذی تشکیل شده است؟
برای شروع، جدول Products را از پایگاه داده نمونه انتخاب میکنیم. بعد، روی دکمه Summarize در query builder کلیک میکنیم و Custom Expression را انتخاب میکنیم. سپس، Share را از منوی dropdown انتخاب میکنیم، که از ما یک شرط میخواهد. در این مورد، میخواهیم بدانیم کدام محصولات "Paper" در عنوان آنها دارند، پس از تابع contains برای جستجو از طریق Title استفاده میکنیم.
Share(contains([Title], "Paper"))
سپس عبارت خود را نامگذاری میکنیم (مثلاً، Percentage of paper products) و روی Done کلیک میکنیم. روی دکمه Visualize کلیک کنید و متابیس share محصولات کاغذی را محاسبه میکند.
برای تغییر فرمت، دکمه Settings در پایین-چپ را انتخاب کنید تا Sidebar Settings باز شود و Number options → Style را به Percent تغییر دهید.

کنار هم گذاشتن همه
بیایید یک سؤال نسبتاً پیچیده (ساختگی) با استفاده از عبارات ایجاد کنیم. بگویید به ما تکلیف شده است میانگین net inflow برای محصولات پشمی و پنبهای بر اساس ماه در 2019 را پیدا کنیم، با net inflow که قیمت فروش منهای هزینهای است که برای محصول پرداخت کردیم. به عبارت دیگر: برای هر واحد محصول پشمی و پنبهای فروخته شده، به طور میانگین چقدر پول در هر واحد هر ماه در 2019 درآمد (یا از دست) دادیم؟
برای دریافت این اعداد جذاب، نیاز به استفاده از عبارات برای:
- محاسبه قیمت فروش هر واحد (ستون سفارشی).
- فیلتر کردن نتایج تا فقط شامل محصولات پشمی یا پنبهای (فیلتر سفارشی)، و محدود کردن آن نتایج به 2019.
- محاسبه میانگین net inflow (خلاصه سفارشی)، و group بر اساس ماه.
بیایید برویم:
- یک ستون سفارشی به نام
Unit priceایجاد میکنیم. برای محاسبهUnit price، از یک عبارت برای تقسیم subtotal بر تعداد واحدهای فروخته شده (Quantity) استفاده میکنیم:mbql [Subtotal] / [Quantity] - بعد، از یک عبارت فیلتر سفارشی برای فیلتر کردن سفارشهای محصولات
WoolوCottonاستفاده میکنیم (یعنی برای محصولاتی که شامل "Wool" یا "Cotton" در جایی درProduct.Titleآنها هستند).mbql contains([Products → Title], "Wool") OR contains([Products → Title], "Cotton") - همچنین برای سفارشها بین
01/01/2019و12/31/2019فیلتر میکنیم. - از یک عبارت سفارشی برای ایجاد یک خلاصه سفارشی استفاده میکنیم. فرض کنیم markup خردهفروشی استاندارد 50% (markup keystone). پس اگر
Product.Price2 دلار است، فرض میکنیم محصول برای ما 1 دلار در هر واحد هزینه داشته است. با این فرض، میتوانیم به سادگی net inflow در هر واحد فروخته شده را به عنوانUnit priceمنهای نصفProduct.Priceتعریف کنیم. سپس آن داده را با گرفتن میانگین آن اعداد برای هر سفارش خلاصه میکنیم.mbql Average([Unit price] - [Products → Price] / 2) - در نهایت، آن سفارشها را بر اساس
Orders.Created_Atبر اساس ماه group میکنیم.
در اینجا notebook ما:

انتخاب میکنیم داده خود را به عنوان یک نمودار خطی تجسم کنیم، که میتوانیم روی آن کلیک کنیم تا از طریق داده خود drill through کنیم:

مطالعه بیشتر
- مستندات: عبارات سفارشی در query builder. توابع بسیار بیشتری وجود دارند که میتوانید در عبارات استفاده کنید که پوشش ندادیم، پس مستندات را برای فهرست کامل توابع بررسی کنید.
- مقایسههای سری زمانی نشان میدهد چگونه از عبارات سفارشی برای تجسم و مقایسه سری زمانی استفاده کنید.
- تمیز و فرمت کردن متن از عبارات سفارشی برای برخورد با داده نامرتب و ناقص استفاده میکند.
[
](drill-through.html)[
](joins-in-metabase.html)