Thep Excel

SUMMARIZECOLUMNS – สร้างตารางสรุปแบบ Dynamic Query

SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที

=SUMMARIZECOLUMNS( <groupBy_columnName> [, <filterTable>] [, <name>, <expression>] )

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
6/10

Usefulness
7/10

Syntax & Arguments

=SUMMARIZECOLUMNS( <groupBy_columnName> [, <filterTable>] [, <name>, <expression>] )

Argument Type Required Default Description
groupBy_columnName Column Yes คอลัมน์สำหรับจัดกลุ่ม (Group By) ต้องระบุแบบ Fully Qualified เช่น Table[Column] สามารถระบุได้หลายคอลัมน์ แต่ห้ามซ้ำกัน (แต่ละคอลัมน์จะถูก Cross-Join ถ้าต่างตาราง หรือ Auto-Exist ถ้าตารางเดียวกัน)
filterTable Table Optional ตารางเงื่อนไขที่ใช้กรองบริบทก่อนทำการ Group By สามารถใช้ฟังก์ชันอย่าง FILTER, TREATAS, KEEPFILTERS, REMOVEFILTERS, NONVISUAL ได้
name Text Optional ชื่อคอลัมน์ใหม่ที่ต้องการเพิ่มในตารางผลลัพธ์ (จับคู่กับ expression)
expression Expression Optional นิพจน์ DAX ที่คืนค่าเดี่ยว (ไม่ใช่ตาราง) สำหรับคำนวณค่าในคอลัมน์ใหม่ สามารถระบุได้หลายคู่ name/expression

How it works

สร้างตารางสรุปเพื่อใช้ตรวจสอบ/ส่งออก

สร้างตารางผลรวมตามมิติที่ต้องการ แล้วใช้ EVALUATE เพื่อดูผลลัพธ์ หรือส่งต่อให้ฟังก์ชันอื่น

สรุปผลพร้อมจำกัดบริบทด้วย criteria table

ใส่ตารางเงื่อนไขเพื่อกำหนดว่าให้สรุปเฉพาะบางกลุ่ม/บางค่าที่สนใจ

Examples

ตัวอย่างพื้นฐาน – สรุปยอดขายตามหมวดสินค้า
EVALUATE SUMMARIZECOLUMNS( 'Product'[Category], "Total Sales", SUM(Sales[Amount]) )
ระบุ Group By Column คือ Product[Category] และเพิ่มคอลัมน์คำนวณชื่อ "Total Sales" โดยใช้ SUM(Sales[Amount])
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Product'[Category],
    "Total Sales", SUM(Sales[Amount])
)

Result:

ตารางที่มี 2 คอลัมน์: Category และ Total Sales แสดงยอดขายรวมของแต่ละหมวด

ตัวอย่างการจัดกลุ่มหลายมิติ
EVALUATE SUMMARIZECOLUMNS( 'Product'[Category], 'Date'[Year], "Total Sales", [Sales Amount], "Total Quantity", SUM(Sales[Quantity]) )
จัดกลุ่มทั้ง Product[Category] และ Date[Year] พร้อมเพิ่ม 2 คอลัมน์คำนวณ (Total Sales และ Total Quantity)
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Product'[Category],
    'Date'[Year],
    "Total Sales", [Sales Amount],
    "Total Quantity", SUM(Sales[Quantity])
)

Result:

ตารางที่แสดงยอดขายและจำนวนสินค้าตามหมวดสินค้า x ปี

ตัวอย่างการใช้ Filter Table ด้วย TREATAS
EVALUATE SUMMARIZECOLUMNS( 'Product'[Category], TREATAS({"Bikes", "Accessories"}, 'Product'[Category]), "Sales", [Sales Amount] )
ใช้ TREATAS เพื่อจำกัดบริบทให้แสดงเฉพาะหมวดที่กำหนด โดยไม่ต้องใช้ CALCULATE
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Product'[Category],
    TREATAS({"Bikes", "Accessories"}, 'Product'[Category]),
    "Sales", [Sales Amount]
)

Result:

แสดงเฉพาะหมวด Bikes และ Accessories พร้อมยอดขาย

ตัวอย่างการใช้ FILTER เพื่อกรองเงื่อนไข
EVALUATE SUMMARIZECOLUMNS( 'Product'[Category], 'Customer'[Education], FILTER('Customer', 'Customer'[FirstName] = "John"), "Sales", [Sales Amount] )
ใช้ FILTER เพื่อจำกัดเฉพาะลูกค้าที่ชื่อ John โดย Filter จะมีผลเฉพาะเมื่อ Customer[Education] อยู่ใน GroupBy Columns (ตาม SelfValue Semantics ของ DAX 2024+)
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Product'[Category],
    'Customer'[Education],
    FILTER('Customer', 'Customer'[FirstName] = "John"),
    "Sales", [Sales Amount]
)

Result:

สรุปยอดขายตามหมวดสินค้าและระดับการศึกษาของลูกค้าที่ชื่อ John

ตัวอย่างการสร้าง Subtotal ด้วย ROLLUPADDISSUBTOTAL
EVALUATE SUMMARIZECOLUMNS( ROLLUPADDISSUBTOTAL('Product'[Category], "IsSubtotal"), "Total Sales", SUM(Sales[Amount]) )
ROLLUPADDISSUBTOTAL จะเพิ่มแถว Subtotal โดยมีคอลัมน์ IsSubtotal เป็น TRUE สำหรับแถว Subtotal และ FALSE สำหรับแถวรายละเอียด
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    ROLLUPADDISSUBTOTAL('Product'[Category], "IsSubtotal"),
    "Total Sales", SUM(Sales[Amount])
)

Result:

ตารางที่แสดงยอดขายแต่ละหมวด พร้อมแถว Grand Total (IsSubtotal = TRUE)

ตัวอย่างการใช้ NONVISUAL เพื่อแยก Filter กับ Measure
EVALUATE SUMMARIZECOLUMNS( 'Date'[CalendarYear], NONVISUAL(TREATAS({2023, 2024}, 'Date'[CalendarYear])), "Sales", [Sales Amount], "All Years Sales", CALCULATE([…
NONVISUAL ทำให้ TREATAS มีผลเฉพาะกับ GroupBy Column แต่ไม่กระทบกับการคำนวณ Measure ทำให้ All Years Sales คำนวณจากทุกปีได้
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Date'[CalendarYear],
    NONVISUAL(TREATAS({2023, 2024}, 'Date'[CalendarYear])),
    "Sales", [Sales Amount],
    "All Years Sales", CALCULATE([Sales Amount], ALLSELECTED('Date'[CalendarYear]))
)

Result:

แสดงยอดขายปี 2023-2024 พร้อมคอลัมน์ที่แสดงยอดรวมทุกปี

ตัวอย่าง Edge Case – แถวที่ Expression เป็น BLANK จะถูกตัดออก
EVALUATE SUMMARIZECOLUMNS( 'Product'[Category], "High Value Sales", IF(SUM(Sales[Amount]) > 100000, SUM(Sales[Amount])) )
SUMMARIZECOLUMNS จะคืนเฉพาะแถวที่มีอย่างน้อยหนึ่ง Expression ไม่เป็น BLANK ถ้าต้องการให้แสดงทุกแถว ใช้ IGNORE() ห่อ Expression
DAX Formula:

=EVALUATE
SUMMARIZECOLUMNS(
    'Product'[Category],
    "High Value Sales", IF(SUM(Sales[Amount]) > 100000, SUM(Sales[Amount]))
)

Result:

แสดงเฉพาะหมวดที่มียอดขายเกิน 100,000 (หมวดที่น้อยกว่าจะไม่แสดงเพราะ IF คืน BLANK)

FAQs

SUMMARIZECOLUMNS ต่างจาก SUMMARIZE อย่างไร?

SUMMARIZECOLUMNS เป็นฟังก์ชันใหม่กว่าและออกแบบมาสำหรับการสร้างตารางสรุปโดยเฉพาะ มีประสิทธิภาพดีกว่า SUMMARIZE และรองรับ Filter Table, ROLLUP และ Context Transition ได้ดีกว่า แนะนำให้ใช้ SUMMARIZECOLUMNS แทน SUMMARIZE ในทุกกรณีที่ทำได้

ทำไมบางแถวไม่แสดงในผลลัพธ์?

SUMMARIZECOLUMNS จะคืนเฉพาะแถวที่มีอย่างน้อยหนึ่ง Expression คืนค่าไม่เป็น BLANK ถ้าทุก Expression เป็น BLANK แถวนั้นจะถูกตัดออก ถ้าต้องการให้แสดงทุกแถว ให้ใช้ IGNORE() ห่อ Expression ที่อาจเป็น BLANK

ใช้ SUMMARIZECOLUMNS ใน Measure ได้ไหม?

ได้ครับ ตั้งแต่ DAX 2024 (June 2024 Update) ขึ้นไป SUMMARIZECOLUMNS รองรับ Context Transition ใน Measure แล้ว แต่ต้องระวังเรื่อง Performance เพราะ SUMMARIZECOLUMNS จะสร้างตารางทั้งหมดทุกครั้งที่ Evaluate

Filter Table ทำงานอย่างไร?

Filter Table จะถูกนำไปใช้กรอง Filter Context ก่อนทำการ Cross-Join/Auto-Exist ของ GroupBy Columns แต่ตาม SelfValue Semantics (2024+) Filter จากตารางภายนอกจะไม่มีผลกับ GroupBy Columns ยกเว้นว่าคอลัมน์นั้นอยู่ในตารางเดียวกับ Filter หรือเป็น GroupBy Column เอง

DirectQuery รองรับ SUMMARIZECOLUMNS ไหม?

รองรับแต่มีข้อจำกัด คือใช้ใน Calculated Column หรือ RLS Rules ไม่ได้ แต่ใช้ใน Measure และ Calculated Table ได้ปกติ

ROLLUPADDISSUBTOTAL ทำอะไร?

เพิ่มแถว Subtotal/Grand Total ในตารางผลลัพธ์โดยอัตโนมัติ พร้อมเพิ่มคอลัมน์ Boolean เพื่อระบุว่าแถวไหนเป็น Subtotal (TRUE) หรือรายละเอียด (FALSE) เหมาะสำหรับสร้างรายงานที่ต้องการ Summary ทุกระดับ

Resources & Related

Related functions

Additional Notes

SUMMARIZECOLUMNS เป็นฟังก์ชันสำหรับสร้างตารางสรุปผล (summary table) แบบ Dynamic โดยการจัดกลุ่มตามคอลัมน์ที่ระบุ พร้อมเพิ่มคอลัมน์คำนวณจากนิพจน์หรือเมเชอร์ และที่เจ๋งคือสามารถใส่ตารางเงื่อนไข (filter table) เพื่อจำกัดบริบทได้ทันทีโดยไม่ต้องห่อด้วย CALCULATE

ฟังก์ชันนี้ทำงานได้ทั้งใน Calculated Table, Measure และ Calculated Column (ยกเว้น DirectQuery) และเป็นฟังก์ชันหลักที่ใช้สำหรับ Query DAX ใน DAX Studio หรือ Power BI Report Builder

ที่น่าสนใจคือ SUMMARIZECOLUMNS มีฟีเจอร์พิเศษคือสามารถสร้าง Subtotal/Rollup ได้โดยใช้ ROLLUPADDISSUBTOTAL และควบคุมระดับการ Rollup ด้วย ROLLUPGROUP

ส่วนตัวผมคิดว่า SUMMARIZECOLUMNS เป็นฟังก์ชันที่ทรงพลังมาก แต่ก็ซับซ้อนพอสมควร โดยเฉพาะเรื่อง Filter Context และ Auto-Exists Behavior ถ้าจะใช้ให้เก่ง แนะนำให้เข้าใจหลักการ Filter Context และ Lineage ของ DAX ให้ดีก่อน 😎

Leave a Reply

Your email address will not be published. Required fields are marked *