ROLLUP บอก SUMMARIZE ให้สร้างแถว subtotal เพิ่มเติมตามคอลัมน์ที่กำหนด ทำให้ได้ทั้งรายละเอียดและรวมย่อยในผลลัพธ์เดียว
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| GroupColumn | column | คอลัมน์ที่ต้องการสร้างแถว subtotal (ระบุได้หลายคอลัมน์ เรียงลำดับจากระดับสูงสุดไปต่ำสุด เช่น ปี แล้วเดือน) |
ROLLUP เป็นฟังก์ชันพิเศษที่ใช้ภายใน SUMMARIZE เพื่อระบุว่า “คอลัมน์ใดควรสร้างแถว subtotal” ตัวอย่างเช่น ถ้าคุณ group by ปี และเดือน โดยธรรมชาติ SUMMARIZE จะได้แถวรายละเอียดเพียง (2023, January), (2023, February) เป็นต้น แต่ถ้าใส่ ROLLUP จะเพิ่มแถว subtotal อีก (2023, [blank]) สำหรับรวมปี 2023
ที่เจ๋งคือ ROLLUP ทำให้คุณได้ “pyramid of aggregation” – เห็นทั้งรายละเอียดขั้นละเอียด (month-level) และรวมระดับบน (year-level) ในตารางเดียว ถ้าไม่มี ROLLUP ต้องสร้าง SUMMARIZE หลายตัวแล้วรวมกัน
ส่วนตัวผมใช้ ROLLUP กับ ISSUBTOTAL ข้อคู่ – ROLLUP สร้างแถว ISSUBTOTAL บอกว่าแถวไหนเป็น subtotal ถึงจะควบคุมการ format/filter/คำนวณต่อได้ง่าย ประหยัด performance กว่าสร้าง SUMMARIZE หลายทีมากครับ
คืนทั้งแถวรายละเอียดและแถวรวมย่อยเพื่อเอาไปแสดงผล
ใช้ ISSUBTOTAL แยกแถว subtotal ออกจากแถวรายละเอียด
ROLLUP กับ 1 คอลัมน์ = สร้างแถว subtotal 1 ชั้น ในตัวอย่างนี้ได้ (2022, Amount), (2023, Amount), (BLANK, Total) โดย BLANK แสดงว่าเป็น subtotal
ROLLUP 2 คอลัมน์ + ISSUBTOTAL ช่วยบอกว่าแถวไหนเป็น subtotal ที่ใด – ได้ structure ชัดเจนสำหรับ format หรือ filter ต่อ
ใช้หลาย ISSUBTOTAL เพื่อตรวจว่า subtotal เป็นระดับไหน ช่วยตัดสินใจการ format หรือซ่อนแถว subtotal บางประเภท
ถ้าต้องการเห็นเฉพาะรายละเอียดโดยไม่ต้องสร้าง SUMMARIZE ใหม่ ให้ FILTER บนผลลัพธ์ ROLLUP
ROLLUP ใช้เฉพาะภายใน SUMMARIZE เท่านั้น ไม่สามารถใช้กับ SUMMARIZECOLUMNS ได้
เพราะ ROLLUP ทำหน้าที่ "บอก" ว่าคอลัมน์ไหนควรสร้าง subtotal ถ้าคอลัมน์ที่ group ไม่อยู่ใน ROLLUP ก็จะไม่สร้าง subtotal ระดับนั้น ลำดับของ ROLLUP มีความสำคัญ – เรียงจากระดับ detail ไปรวม ทั่วไป
ROLLUP สร้างแถว subtotal โดยใช้ BLANK บอกตำแหน่ง ROLLUPADDISSUBTOTAL สร้างแถว subtotal และเพิ่มคอลัมน์ที่ทำให้รู้ว่าเป็น subtotal เลยตรงไหน (ด้วย marker อยู่ในคอลัมน์เดียว) แต่ ROLLUPADDISSUBTOTAL ใช้เฉพาะ SUMMARIZECOLUMNS
ค่า BLANK – ช่วยให้ ISSUBTOTAL รู้ว่าแถวไหนเป็น subtotal ถ้าคอลัมน์นั้นเป็น text ก็จะว่าง ถ้าเป็นตัวเลขก็เป็น 0 หรือ BLANK ขึ้นอยู่ context
ไม่ได้ ROLLUP รับเฉพาะคอลัมน์ (column reference) ไม่สามารถส่ง expression หรือ measure เข้าไป หากต้องการ subtotal ตามเงื่อนไข ต้องใช้ VAR + FILTER บนผลลัพธ์
ฟังก์ชันที่ผู้เขียนโยงไว้กับ ROLLUP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ADDMISSINGITEMS เติมสมาชิกที่หายไปในผลลัพธ์สรุปแบบกลุ่ม เพื่อให้แสดงครบทุกสมาชิกของคอลัมน์ที่ระบุ เหมาะกับรายงานที่ต้องการเห็นรายการที่ไม่มีข้อมูลด้วย
ROLLUPADDISSUBTOTAL ใช้ใน SUMMARIZECOLUMNS เพื่อเพิ่มแถว roll-up/subtotal และเพิ่มคอลัมน์ IsSubtotal สำหรับแต่ละระดับที่กำหนด ทำให้แยกแถว subtotal ออกจากรายละเอียดได้ง่าย
ROLLUPGROUP ระบุชุดคอลัมน์ที่จะถูกพิจารณาเป็น “กลุ่มเดียว” สำหรับการสร้าง subtotal/roll-up ช่วยลด subtotal บางระดับ และมักใช้ร่วมกับ ROLLUP ใน SUMMARIZE
ROLLUPISSUBTOTAL ใช้ใน ADDMISSINGITEMS เพื่อจับคู่กลุ่ม roll-up กับคอลัมน์ IsSubtotal ที่สร้างจาก ROLLUPADDISSUBTOTAL ทำให้การเติมรายการที่ขาดหายทำงานได้ถูกต้องเมื่อมี roll-up/subtotal rows
SUMMARIZE สร้างตารางสรุปโดยจัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนด คล้าย GROUP BY ใน SQL หรือ Pivot Table ใน Excel คืนค่าตารางที่มีหนึ่งแถวต่อหนึ่ง unique combination ของคอลัมน์ที่เลือก สามารถอ้างถึงคอลัมน์จาก related table ได้โดยตรงโดยไม่ต้องใช้ RELATED มักใช้สร้าง virtual table ใน measure เพื่อทำ intermediate calculations ก่อนใช้ iterator functions อย่าง SUMX, AVERAGEX คำนวณต่อ ⚠️ Best Practice: ใช้ ADDCOLUMNS ครอบ SUMMARIZE แทนการใส่ extension columns ตรงๆ เพื่อ performance และ filter context control ที่ดีกว่า สำหรับ calculated table แนะนำใช้ SUMMARIZECOLUMNS แทนเนื่องจากมี performance ดีกว่าอย่างมาก
SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที
TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่