محاسبهٔ زندهٔ تخفیف ثبتنام با Rollup و Formula
بدون ذخیرهٔ اسنپشات و بدون تغییر فلو، فقط با ترکیب Rollup و Formula، مبلغ کل تخفیف ثبتنام روی هر خانواده بهصورت زنده محاسبه میشود.
فرض کنید هر یک از این پنج مورد ۱۰٪ تخفیف میدهد و مجموع حداکثر ۱۰۰٪: همکاری پدر، همکاری مادر، طلبگی پدر، دو یا چند فرزندِ ثبتنامی، پرداخت یکجا. مبلغ نهایی = شهریهٔ کل × درصد تخفیف / ۱۰۰. هدف این است که این مقدار همیشه بر اساس دادهٔ فعلی خانواده بهروز باشد، نه یک عدد ذخیرهشده.
چرا Rollup با count و فیلتر؟
Rollup فقط تجمیع (sum/avg/count/min/max/concat) میدهد و نمیتواند «مقدار یک فیلد از یک رکورد خاص» را برگرداند. برای پرسش «آیا پدرِ همکارِ مدرسه وجود دارد؟» از count با دو فیلتر روی مجموعهٔ اشخاص استفاده میکنیم: role=پدر و is_school_collaborator=yes. خروجی ۰ یا ۱ میشود و در فرمول با min(1, …) کلمپ میشود تا اگر روزی رکورد تکراری هم باشد بیش از ۱۰٪ حساب نشود.
چهار فیلد Rollup روی خانواده
۱) disc_flag_collab_father — count روی persons با role=پدر و is_school_collaborator=yes. ۲) disc_flag_collab_mother — همان با role=مادر. ۳) disc_flag_seminarian_father — count روی persons با role=پدر و is_seminarian=yes. ۴) disc_enrollments_count — count روی enrollments بدون فیلتر.
فرمول درصد
یک فیلد Formula به نام family_total_discount_pct بسازید: min(100, min(1, disc_flag_collab_father)*10 + min(1, disc_flag_collab_mother)*10 + min(1, disc_flag_seminarian_father)*10 + if(disc_enrollments_count >= 2, 10, 0) + if(installment_plan == "full", 10, 0))
فرمول مبلغ نهایی
فیلد Formula با برچسب «جمع تخفیفهای ثبتنام» به نام family_total_discount: round(family_enrollments_tuition_total * family_total_discount_pct / 100, 0)