نمونهای از کاربرد ستاکسپرژن در کلیکویو
در مقاله ستاکسپرژنها در کلیکویو با مفهوم ستاکسپرژن و قانونهای حاکم بر آن آشنا شدهاید. در آن مقاله، دیدید که چگونه یک ستاکسپرژن با ساخت مجموعهها و ترکیب آنها با استفاده از عملگرهایی مانند اجتماع، اشتراک، تفاضل و تفاضل متقارن مجموعهای جدید میسازد و با استفاده از این مجموعه تازه، نتایج یک تابع همانند جمع و یا میانگین را محاسبهمیکند. از آنجایی که کلیکویو همچون یک دیتابیس(همانند SQL) عملمیکند، لذا اگر بخواهیم ستاکسپرژنها را با دستورهای SQL مقایسه کنیم باید آن را با ترکیبی از دستورهای where، union، cross join و نظیر اینها مقایسهکنیم. هر ستاکسپرژن شامل چند بخش میباشد(این بخشها عبارتند از ستمدیفایر، ستآیدنتیفایر و ستاوپریتور). هر ستمدیفایر تقریبا(توجه شود تقریبا) مشابه دستور where در SQL میباشد و ترکیب ستآیدنتیفایر با ستاوپریتور را میتوان با union و cross join مقایسه کرد. اگر با دیتابیس کارکرده باشید یادگیری دستورهای ستاکسپرژن چندان سخت نخواهد بود. تمرین و حل مسئله بهترین روش یادگیری میباشد، لذا در این مقاله با یک مثال کاربردی به استفاده از ستاکسپرژنها خواهیمپرداخت.
یک فایل جدید در کلیکویو دسکتاپ ایجاد کنید و کد زیر را درون بخش ادیتاسکریپت آن اضافه کنید فایل را ذخیره و بارگذاری نمایید:
Load * Inline [
row, name, year, sale
1, فرزاد, 1398, 3700
2, فرهاد, 1398, 4400
3, فرشاد, 1398, 5100
4, فرزین, 1398, 6700
5, فربد, 1398, 5400
6, فرنود, 1398, 5400
7, فرنام, 1398, 6700
8, فردین, 1398, 4600
9, فرشید, 1398, 5900
10, فرزاد, 1399, 6700
11, فرهاد, 1399, 5500
12, فرشاد, 1399, 5000
13, فرزین, 1399, 7000
14, فربد, 1399, 5500
15, فرنود, 1399, 7000
16, فرنام, 1399, 4500
17, فردین, 1399, 6100
18, فرشید, 1399, 5000
19, فرزاد, 1400, 6600
20, فرهاد, 1400, 4000
21, فرشاد, 1400, 5700
22, فرزین, 1400, 3100
23, فربد, 1400, 5000
24, فرنود, 1400, 6700
25, فرنام, 1400, 5100
26, فردین, 1400, 5000
27, فرشید, 1400, 5000
28, فرزاد, 1401, 4500
29, فرهاد, 1401, 5200
30, فرشاد, 1401, 6000
31, فرزین, 1401, 6900
32, فربد, 1401, 5300
33, فرنود, 1401, 3600
34, فرنام, 1401, 4000
35, فردین, 1401, 3600
36, فرشید, 1401, 3100
];البته میتوانید این اطلاعات را درون یک فایل اکسل بیافزایید و آن را لود نمایید. در شیت Main راست کلیک کرده و گزینه Select Fields را انتخاب کرده و فیلدهای name و year را به شیت اضافه نمایید(نام آن را بخش انتخاب فیلد میگذاریم). مانند شکل زیر:
یک چارت از نوع Pivot Table ایجاد کنید، در قسمت دایمنشن نیازی به چیزی نیست اما در قسمت Expressions موارد زیر را که در بخش formula نوشته شده است وارد نمایید.
| 1 | sum({1}sale) |
| 2 | sum(sale) |
| 3 | sum({$}sale) |
| 4 | sum({<year={1400,1401}>} sale) |
| 5 | sum({1<year={1400,1401}>} sale) |
| 6 | sum({$<year={">=1400"}>} sale) |
| 7 | sum({1<year={">=1400<=1401"}>} sale) |
| 8 | sum({name={"فرز*"}>} sale) |
| 9 | sum({1<year={1400,1401}>+<name={"فرز*"}>} sale) |
| 10 | sum({1<year={1400,1401}>+$<name={"فرز*"}>} sale) |
| 11 | sum({$<year={1400,1401}>+1<name={"فرز*"}>} sale) |
| 12 | sum({1<year={1400,1401}>+1<name={"فرز*"}>} sale) |
| 13 | sum({1<year={1400,1401}>-1<name={"فرز*"}>} sale) |
| 14 | sum({1<year={1400,1401}>*1<name={"فرز*"}>} sale) |
| 15 | sum({1<year={1400,1401}>/1<name={"فرز*"}>} sale) |
| 16 | sum({<year={">=1401"}>} sale) |
| 17 | sum({<year -={1401}>} sale) |
حال به ترتیب از خط نخست هر خط را توضح میدهم:
- خط نخست حاصل جمع همه رکوردها را فارغ از انتخابهایمان برمیگرداند(عدد 188600) حال برای فیلد name و یا year مقداری را انتخاب کنید مشاهدهمیشود مقدار خط یک تغییری نمیکند و همواره عدد 188600 نمایشدادهمیشود.
- این خط مشابه خط بالایی است با این تفاوت که با انتخاب مثلا سال 1401 مقدار به عدد 42200 تغییرمیکند(حاصل، جمع کل فروش در سال 1401 است) یعنی انتخاب فیلد مقدار را تغییر میدهد برخلاف خط بالایی.
- این خط دقیقا مشابه خط دو میباشد.
- این خط حاصل جمع فروش برای سالهای 1400 و 1401 را برمیگرداند، توجهکنید با انتخاب فیلد name به مقدار فرید عدد حاصل جمع به عدد 10300 تغییرمیکند اما با انتخاب فیلد year با مقدار مثلا 1399 یا هر سال دیگر مقدار حاصل جمع تغییر نمیکند زیرا در ستاکسپرژن مربوطه از فیلد year استفادهشده({<year={1400,1401}>}) که این باعث میشود انتخاب فیلد year هیچتاثیری روی نتیجه نداشتهباشد. توجه کنید اگر در یک ستاکسپرژن نام فیلدی قید شود، آنگاه انتخاب مقادیر برای آن فیلد هیچ تاثیری در نتیجه نخواهد داشت.
- این خط مانند خط 4 میباشد با این تفاوت که انتخاب فیلد name هیچ تاثیری روی نتیجه ندارد و همیشه حاصل عدد 88400 میباشد.
- این خط حاصل فروش را برای سالهای بزرگتر از 1400 را میدهد(مقدار آن با توجه به دادهها با خط 4 برابر میشود).
- این خط با توجه به دادههای موجود مقداری مشابه با خط 5 برمیگرداند(حاصل تمام اطلاعات که مقدار فیلد year آنها از 1400 بیشتر یا مساوی و از 1401 کمتر یا مساوی است).
- حاصل کل فروش را برای همه کسانی که فیلد name آنها با فرز آغاز میشود را برمیگرداند. توجه کنید با انتخاب فیلد year مقدار متفاوت خواهد بود، اما با انتخاب فیلد name مقدار تغییر نخواهدکرد.
- این خط نخست یک مجموعه از رکوردهای فروش برای سالهای 1400 و 1401 را تهیه میبیند(مجموعه A) سپس یک مجموعه از کسانی که نام آنها با حروف فرز شروع میشود تهیهمیکند(مجموعه B) سپس با اجتماع این دو(مجموعه C) حاصل جمع کل فروش را بدستمیدهد. به شکل زیر توجه کنید:(توجه کنید که مجموعههای شکل زیر با این فرض میباشد که هیچ انتخابی انجام نشده و اگر محدوده خاصی انتخاب شده باشد مثلا سال 1399 آنگاه نتیجه میتواند متفاوت باشد اما ... خودتان تست کنید و علت را به خودتان توضیح دهید)
- نتیجه مشابه خط 9 میباشد.
- مانند 9 قابل توضیح است.
- مانند 9 قابل توضیح است.
- مانند 9 قابل توضیح است.
- مانند 9 قابل توضیح است.
- این بخش یک تفاضل متقارن است، بر روی دو مجموعه A و B(در عکس بالا) وقتی تفاضل متقارن انجام شود بخشهای زرد رنگ از هر دو مجموعه حذف و سپس با هم ادغام میشوند. حاصل عدد 91400 میباشد(باز با این شرط که هیچ انتخابی نداشته باشیم).
- نتیجه حاصل جمع کلیه اطلاعاتی است که مقدار فیلد year در آنها بزرگتریا مساوی 1401 باشد(در اینجا با توجه به اطلاعات، همان سال 1401 است).
- حاصل جمع همه سالها بجز سال 1401 برمیگردد.
نتایج در فایل پیوست موجود میباشد.
فایلهای مطلب
نمونهای از کاربرد ستاکسپرژن در کلیکویو (128.15 کیلو بایت)



