Thep Excel

ADDCOLUMNS – เพิ่มคอลัมน์คำนวณให้ตาราง

ADDCOLUMNS เป็นฟังก์ชัน table transformation ที่ใช้สำหรับเพิ่มคอลัมน์ใหม่ (Calculated Columns) เข้าไปในตารางที่มีอยู่เดิม โดยคำนวณค่าในแต่ละแถวผ่าน Row Context และส่งคืนตารางเดิมพร้อมคอลัมน์ใหม่ต่อท้าย

=ADDCOLUMNS(<table>, <name>, <expression>[, <name>, <expression>]...)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
5/10

Usefulness
7/10

Syntax & Arguments

=ADDCOLUMNS(<table>, <name>, <expression>[, <name>, <expression>]...)

Argument Type Required Default Description
table Table Yes ตารางต้นฉบับ หรือตารางที่ได้จาก DAX Expression (เช่น FILTER, ALL, VALUES เป็นต้น)
name Text Yes ชื่อของคอลัมน์ใหม่ที่ต้องการสร้าง ต้องใส่ในเครื่องหมายคำพูด “…”
expression Scalar Yes สูตร DAX ที่ใช้คำนวณค่าในคอลัมน์ใหม่ จะถูกคำนวณในแต่ละแถวของตาราง (Row Context)

How it works

การสร้าง Date Table มาตรฐาน

ใช้ ADDCOLUMNS เพื่อเพิ่มคอลัมน์ Year, Month, Quarter, Fiscal Year เข้าไปในตารางที่สร้างจาก CALENDAR() หรือ CALENDARAUTO() เพื่อใช้เป็น Dimension Table หลักในโมเดล

การ Debug ค่าใน Virtual Table

เมื่อเขียนสูตรซับซ้อน เราสามารถใช้ ADDCOLUMNS สร้างตารางทดสอบเพื่อดูค่าที่คำนวณได้ในแต่ละแถว ก่อนที่จะนำไป Aggregate ด้วย SUMX หรือ AVERAGEX

Examples

ตัวอย่างที่ 1: เพิ่มคอลัมน์คำนวณราคาสุทธิ (สร้างตาราง helper)
ADDCOLUMNS( Sales, "NetPrice", [Quantity] * [Price] )
สร้างคอลัมน์ใหม่ชื่อ NetPrice โดยคำนวณจากการคูณ Quantity กับ Price ในแต่ละแถว Row Context จะคำนวณอัตโนมัติสำหรับแต่ละแถว
DAX Formula:

=ADDCOLUMNS(
    Sales,
    "NetPrice", [Quantity] * [Price]
)

Result:

ตาราง Sales ที่มีคอลัมน์ NetPrice เพิ่มเข้ามา (รวม Quantity, Price, NetPrice)

ตัวอย่างที่ 2: เพิ่มหลายคอลัมน์พร้อมกัน (ส่วนลด และ ราคาสุดท้าย)
ADDCOLUMNS( Sales, "DiscountAmount", [Amount] * 0.1, "FinalPrice", [Amount] * 0.9 )
เพิ่มสองคอลัมน์พร้อมกัน โดยใช้ช่วง name-expression pairs แต่ละคู่ ADDCOLUMNS จะคำนวณในลำดับ ดังนั้น FinalPrice สามารถอ้างอิง Amount ได้เลย
DAX Formula:

=ADDCOLUMNS(
    Sales,
    "DiscountAmount", [Amount] * 0.1,
    "FinalPrice", [Amount] * 0.9
)

Result:

ตาราง Sales ที่มีคอลัมน์ DiscountAmount และ FinalPrice เพิ่มเข้ามา

ตัวอย่างที่ 3: ใช้กับ FILTER และ RELATED (คำนวณยอดขายต่อสินค้า)
ADDCOLUMNS( FILTER(Products, Products[Category] = "Electronics"), "TotalSales", CALCULATE(SUM(Sales[Amount])) )
สำคัญ! เพราะใช้ CALCULATE ร่วมกับ SUM ภายในแถว จาก Row Context (Products[ProductID]) ของแต่ละแถว CALCULATE จะรู้ว่าต้องกรองยอดขายสำหรับสินค้านั้นเท่านั้น มันใช้ Filter Context Transition
DAX Formula:

=ADDCOLUMNS(
    FILTER(Products, Products[Category] = "Electronics"),
    "TotalSales", CALCULATE(SUM(Sales[Amount]))
)

Result:

ตาราง Products ที่ filter เฉพาะ Category = Electronics พร้อมคอลัมน์ TotalSales

ตัวอย่างที่ 4: ใช้กับ GENERATE เพื่อสร้างตารางจำลอง (Simulation Table)
ADDCOLUMNS( GENERATE( VALUES(Products[ProductID]), ROW("SalesAmount", CALCULATE(SUM(Sales[Amount]))) ), "SalesPct", DIVIDE([SalesAmount], CALCULATE(SUM(Sales[Am…
ประยุกต์ใช้ชั้นสูง: GENERATE สร้างจำลองตาราง สูตรแรก ROW ทำให้ได้ SalesAmount แล้ว ADDCOLUMNS เข้ามาเพิ่ม SalesPct โดยหารด้วย ALL(Products) เพื่อได้สัดส่วนต่อยอดขายรวมทั้งหมด
DAX Formula:

=ADDCOLUMNS(
    GENERATE(
        VALUES(Products[ProductID]),
        ROW("SalesAmount", CALCULATE(SUM(Sales[Amount])))
    ),
    "SalesPct", DIVIDE([SalesAmount], CALCULATE(SUM(Sales[Amount]), ALL(Products)), 0)
)

Result:

ตารางที่มีโครงสร้าง ProductID, SalesAmount, SalesPct พร้อมคำนวณสัดส่วน

FAQs

ADDCOLUMNS ต่างจาก SELECTCOLUMNS อย่างไร?

ADDCOLUMNS จะ ‘เก็บ’ คอลัมน์เดิมของตารางไว้ทั้งหมด และเพิ่มคอลัมน์ใหม่ต่อท้าย ส่วน SELECTCOLUMNS จะ ‘ทิ้ง’ คอลัมน์เดิมทั้งหมด แล้วสร้างตารางใหม่ที่มีเฉพาะคอลัมน์ที่คุณระบุ ส่วนตัวผมใช้ ADDCOLUMNS ตอนต้องการเก็บข้อมูลเดิมไว้ แต่อยากเพิ่มข้อมูลใหม่เข้ามา

ทำไมค่าที่คำนวณได้บางครั้งเท่ากันทุกแถว?

ปัญหานี้เจอบ่อยครับ 😅 สาเหตุหลักคือการใช้ฟังก์ชัน Aggregate (เช่น SUM) โดยไม่มี CALCULATE ข้าง หรือไม่ใช้ RELATED ในการเลือกคอลัมน์จากตาราง Related ถ้าจะใช้ SUM ต้องครอบด้วย CALCULATE เพื่อให้รู้ว่าต้องกรองข้อมูลตามแถวปัจจุบันนะครับ

ADDCOLUMNS ทำงานได้บน Calculated Columns หรือแค่ Measures?

ได้ทั้งสองแบบ! ใช้ใน Measures ได้ (เหมาะสำหรับสร้างตารางชั่วคราว) และใช้ใน Calculated Columns ของตารางได้ด้วย แต่ใน DirectQuery mode ไม่สนับสนุน Calculated Columns และ RLS rules ที่ใช้ ADDCOLUMNS

ฉันต้องใช้เครื่องหมายคำพูด " " สำหรับชื่อคอลัมน์ใหม่หรือไม่?

ใช่ ต้องใส่เครื่องหมายคำพูด ” ” เสมอ ถึงแม้ชื่อจะไม่มีช่องว่างก็ตาม ถ้าชื่อคอลัมน์มีช่องว่างหรืออักขระพิเศษ ให้ครอบด้วยวงเล็บเหลี่ยม [] แต่ส่วนตัวผมชอบใช้เครื่องหมายคำพูด เพราะมันชัดเจนว่า column ใหม่นี้จริง ๆ แล้วคือการคำนวณเท่านั้น 😎

Resources & Related

Related functions

Additional Notes

ADDCOLUMNS ใช้สำหรับสร้างตารางชั่วคราว (Virtual Table) ที่มีคอลัมน์ใหม่เพิ่มเข้ามา โดยคำนวณค่าในแต่ละแถวของตาราง
.
ที่เจ๋งคือ ADDCOLUMNS ไม่ทิ้งคอลัมน์เดิมออกมาเลย เอาแบบเพิ่มต่อท้ายเข้ามา ซึ่งต่างจาก SELECTCOLUMNS ที่เลือกเฉพาะคอลัมน์ที่ต้องการ
.
ส่วนตัวผมใช้ ADDCOLUMNS บ่อยเมื่อต้องการสร้างตาราง helper มาใช้ใน SUMX หรือ FILTER เพราะมันเสริมข้อมูลเดิมได้อย่างไม่ทำลายโครงสร้างตาราง 😎
.
แต่ที่ต้องระวังคือฟังก์ชันนี้สร้าง Row Context เท่านั้น ถ้าคุณเขียนสูตร Aggregate (เช่น SUM) โดยไม่มี CALCULATE จะคำนวณยอดรวมทั้งตารางเลย ไม่ใช่แถวปัจจุบัน

Leave a Reply

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