Thep Excel

231 functions

ABS คืนค่าสัมบูรณ์ของตัวเลข โดยลบเครื่องหมายบวกหรือลบออก ตัวเลขบวกจะคืนค่าเดิม ตัวเลขลบจะกลายเป็นบวก ศูนย์ยังคงเป็นศูนย์.ที่เจ๋งคือฟังก์ชันนี้รักษาชนิดข้อมูลเดิม (currency, decimal, integer) และรองรับค่า infinity ด้วย ส่วนตัวผมใช้บ่อยมากตอนต้องคำนวณความแตกต่างระหว่างค่า โดยไม่สนใจว่าค่าไหนมากกว่าหรือน้อยกว่าครับ 💡

Syntax
ABS( Number )

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

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

ADDMISSINGITEMS เติมสมาชิกที่หายไปในผลลัพธ์สรุปแบบกลุ่ม เพื่อให้แสดงครบทุกสมาชิกของคอลัมน์ที่ระบุ เหมาะกับรายงานที่ต้องการเห็นรายการที่ไม่มีข้อมูลด้วย

Syntax
ADDMISSINGITEMS(<Table>)

ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้

Syntax
ALL(<table_or_column>[, <column>[, ...]])

ALLCROSSFILTERED ใช้ล้างตัวกรองทั้งหมดออกจากตารางที่ระบุ รวมถึงตัวกรองที่ส่งผ่านมาจากตารางอื่น (Cross-filter) ใช้ได้เฉพาะเป็น Modifier ใน CALCULATE/CALCULATETABLE เท่านั้น ไม่สามารถคืนค่าเป็นตารางได้

Syntax
ALLCROSSFILTERED(<table>)

ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้

Syntax
ALLEXCEPT(<table>, <column1>)

ALLNOBLANKROW ทำงานคล้าย ALL แต่มีจุดเด่นคือ “ตัดแถวว่าง” ที่ระบบสร้างขึ้นอัตโนมัติเมื่อข้อมูลหลุดความสัมพันธ์ เช่น คีย์ในตารางข้อเท็จจริงไม่พบในตารางมิติ จึงเหมาะกับการคำนวณยอดรวม/สัดส่วนที่ไม่ต้องการให้แถวว่างเข้ามาปนผลลัพธ์ และยังใช้เป็นตัวช่วยตรวจจับปัญหาคุณภาพข้อมูลในโมเดลได้ด้วย

Syntax
ALLNOBLANKROW(<table_or_column>)

ALLSELECTED เป็น DAX function ที่ลบ filter context จาก Visual (row และ column filters) แต่คง filter context จาก Slicer, Page Filter และ Report Filter ไว้ ทำให้สามารถคำนวณ Visual Total ได้ ซึ่งเป็นยอดรวมของข้อมูลที่ผู้ใช้เลือกดูในปัจจุบัน ไม่ใช่ Grand Total ทั้งหมด ฟังก์ชันนี้ทำงานผ่าน Shadow Filter Context ซึ่งเป็น filter context ที่ DAX Engine เก็บไว้ก่อนที่ Visual จะเพิ่ม row/column filter เมื่อเรียก ALLSELECTED จะเรียกคืน shadow context นี้ ใช้ร่วมกับ CALCULATE และ SUM, AVERAGE, DIVIDE เพื่อคำนวณ Visual Total, Percentage of Selected, Dynamic Benchmark, Ranking within Selection และ Time Intelligence ที่เคารพ Slicer ต้องระวังการใช้งานใน iterator functions เช่น SUMX, FILTER เพราะอาจให้ผลลัพธ์ที่ไม่คาดคิด และระวัง Expanded Table Caveat ที่จะลบ filter ของ related table ด้วย

Syntax
ALLSELECTED([table|column[, table|column[, ...]]])

APPROXIMATEDISTINCTCOUNT คืนจำนวนค่าไม่ซ้ำแบบประมาณเพื่อความเร็ว เหมาะกับข้อมูลขนาดใหญ่และงาน DirectQuery ในแหล่งข้อมูลที่รองรับ เมื่อความแม่นยำ 100% ไม่จำเป็น

Syntax
APPROXIMATEDISTINCTCOUNT(<column>)

AVERAGE คำนวณค่าเฉลี่ยเลขคณิตของตัวเลขทั้งหมดในคอลัมน์ โดยข้าม blank cells และข้อความ แต่นับค่า 0 เข้าในการคำนวณ ซึ่งทำให้ค่าเฉลี่ยอาจต่ำลงถ้ามีค่า 0 จำนวนมาก ทำงานภายใต้ filter context ปัจจุบันและทำ context transition ใน calculated column ทำให้สามารถอ้างอิงคอลัมน์จากตารางอื่นผ่าน relationship ได้

Syntax
AVERAGE(<column>)

AVERAGEA คืนค่าเฉลี่ยของค่าภายในคอลัมน์ และรวมการประมวลผลค่าตรรกะ/ข้อความตามกติกา (เช่น TRUE=1, FALSE=0, ข้อความ=0) เหมาะเมื่อข้อมูลมีชนิดปะปนและต้องการสะท้อนผลของค่าที่ไม่ใช่ตัวเลข

Syntax
AVERAGEA(<column>)

AVERAGEX เป็น Iterator Function ที่วนลูปตารางทีละแถว คำนวณ Expression แล้วนำผลลัพธ์มาหาค่าเฉลี่ย เหมาะสำหรับกรณีที่ต้องการเฉลี่ยค่าที่คำนวณได้ เช่น ราคา×จำนวน หรือค่าเฉลี่ยของ Measure ในแต่ละกลุ่ม

Syntax
AVERAGEX(<table>, <expression>)

BITAND คืนผลลัพธ์ของการทำ AND แบบบิตระหว่าง Number1 และ Number2 เหมาะกับการตรวจ bit flags/bitmask เพื่อเช็กสถานะที่ถูกเก็บในตัวเลขเดียว

Syntax
BITAND(<Number1>, <Number2>)

BITOR คืนผลลัพธ์ของ OR แบบบิตระหว่าง Number1 และ Number2 เหมาะกับการรวม bit flags เพื่อสร้างค่า bitmask ใหม่

Syntax
BITOR(<Number1>, <Number2>)

BLANK คืนค่าว่างเปล่า (Empty Value) ในDAX ซึ่งแตกต่างจาก 0 หรือ "" โดยใช้สำหรับระบุว่าไม่มีข้อมูล มักใช้ใน IF เพื่อซ่อนผลลัพธ์ที่ไม่ต้องการ

Syntax
BLANK()

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

Syntax
CALCULATE(<expression>[, <filter>[, <filter>[, ...]]])

CALCULATETABLE evaluate table expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน แล้วคืนค่าเป็น table (ตาราง) ซึ่งแตกต่างจาก CALCULATE ที่คืนค่าเป็น scalar value รองรับ filter arguments 3 รูปแบบ: Boolean expression, table expression, และ filter modifier functions (REMOVEFILTERS, ALL, KEEPFILTERS, USERELATIONSHIP, CROSSFILTER) มีพฤติกรรมเหมือน CALCULATE ในทุกแง่มุมของการจัดการ filter context รวมถึง context transition แต่เหมาะสำหรับการสร้าง intermediate table ที่ถูกกรองแล้วส่งต่อให้ iterator functions หรือใช้ใน calculated table มักมี performance ดีกว่า FILTER ใน simple filtering scenarios เพราะ DAX engine สามารถทำ cardinality estimation และ optimization ได้ดีกว่า

Syntax
CALCULATETABLE(<table>[, <filter>[, <filter>[, ...]]])

CALENDAR ใช้สำหรับสร้างตารางวันที่ครบถ้วนตั้งแต่วันเริ่มต้นถึงวันสิ้นสุดโดยไม่มีช่องว่าง เหมาะสำหรับสร้างตารางวันที่โครงสร้างพื้นฐาน (Date Dimension) ที่ใช้ร่วมกับ Time Intelligence Function

Syntax
CALENDAR(<start_date>, <end_date>)

CALENDARAUTO สร้างตารางวันที่อัตโนมัติโดยอิงช่วงวันที่ที่พบในโมเดล และสามารถกำหนดเดือนสิ้นสุดปีบัญชีได้ เหมาะกับการสร้าง Date table แบบเร็ว ๆ แต่ควรระวังค่าวันที่ผิดปกติในข้อมูล

Syntax
CALENDARAUTO([<FiscalYearEndMonth>])

CLOSINGBALANCEMONTH ประเมิน Expression ณ วันสิ้นเดือนของบริบทวันที่ปัจจุบัน เหมาะกับการทำมาตรวัดยอดคงเหลือปลายเดือน และรองรับการใส่ตัวกรองเพิ่มเติม

Syntax
CLOSINGBALANCEMONTH(<Expression>, <Dates>[, <Filter>])

CLOSINGBALANCEQUARTER ประเมิน Expression ณ วันสิ้นไตรมาสของบริบทวันที่ปัจจุบัน เหมาะกับมาตรวัดยอดคงเหลือปลายไตรมาส และรองรับตัวกรองเพิ่มเติม

Syntax
CLOSINGBALANCEQUARTER(<Expression>, <Dates>[, <Filter>])

CLOSINGBALANCEWEEK ประเมินนิพจน์ (มาตรวัด) ที่วันสิ้นสัปดาห์ของบริบทวันที่ปัจจุบัน สำคัญสำหรับรายงานปิดสัปดาห์และ snapshot ยอดคงเหลือ

Syntax
CLOSINGBALANCEWEEK(<Expression>, <Calendar>[, <Filter>])

ฟังก์ชันเวลา Intelligence ที่ประเมิน Expression ณ วันสิ้นปีของปีในบริบทปัจจุบัน รองรับปีบัญชี (Fiscal Year) และตัวกรองเพิ่มเติม เหมาะสำหรับมาตรวัด Semi-additive เช่น ยอดคงเหลือ ยอดเงินสด

Syntax
CLOSINGBALANCEYEAR(<Expression>, <Dates>[, <Filter>][, <YearEndDate>])

COALESCE คืนค่าแรกที่ไม่เป็น BLANK() จากหลายอาร์กิวเมนต์ เหมาะกับการกำหนดค่าเริ่มต้น (fallback) เช่น ใช้ค่า 0 เมื่อ Measure เป็น BLANK หรือเลือกค่าจากหลายแหล่งตามลำดับความสำคัญ

Syntax
COALESCE(<expression1>, <expression2>[, <expression3>, ...])

COLLAPSE ยุบผลลัพธ์ตารางหรือคอลัมน์ให้เหลือค่าสเกลาร์เดียว ช่วยบังคับให้บริบทมีค่าเดียวก่อนส่งต่อให้ฟังก์ชันอื่น หากมีหลายค่าจะคืน BLANK ช่วยตรวจสอบความถูกต้องของ filter context และใช้กำหนดค่าพารามิเตอร์ที่ควรมีค่าเดียว

Syntax
COLLAPSE(<value>)

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

Syntax
COLLAPSEALL()

COLUMNSTATISTICS ส่งกลับตารางที่ระบุข้อมูลสถิติของทุกคอลัมน์ในทุกตารางของโมเดล DAX ผลลัพธ์ประกอบด้วยชื่อตาราง ชื่อคอลัมน์ ค่า Min/Max, Cardinality (จำนวนค่าไม่ซ้ำ) และความยาวสูงสุด เป็นเครื่องมือสำคัญสำหรับการตรวจสอบคุณภาพข้อมูล การประเมินการกระจายตัว และการเพิ่มประสิทธิภาพโมเดล

Syntax
COLUMNSTATISTICS()

COMBINEVALUES รวมหลายค่าสเกลาร์เป็นข้อความเดียว โดยกำหนดตัวคั่นได้ เหมาะกับการสร้างคีย์รวมจากหลายคอลัมน์ในแถวเดียว

Syntax
COMBINEVALUES(<delimiter>, <expression1>, <expression2>[, <expression3>...])

CONCATENATE ต่อข้อความ 2 ค่าให้เป็นสตริงเดียว เหมาะกับการทำ label หรือรวมข้อความจาก 2 แหล่งในบริบทปัจจุบัน

Syntax
CONCATENATE(<text1>, <text2>)

CONCATENATEX ทำหน้าที่รวมข้อความจากแต่ละแถวในตารางเข้าด้วยกัน เหมาะสำหรับสร้างรายชื่อค่าที่คั่นด้วยจุลภาค หรือรวมข้อมูลจากหลายแถว ใช้ได้กับตัวอักษรหรือค่าใดๆที่ต้องการทำให้เป็นข้อความ

Syntax
CONCATENATEX(<table>, <expression>, [<delimiter>], [<orderBy_expression>], [<order>])

CONTAINS ค้นหาแถวในตารางและคืนค่า TRUE/FALSE เมื่อหาเจอค่าที่ตรงกับเงื่อนไขที่กำหนด เจ๋งเพราะมันเร็วกว่า COUNTROWS + FILTER มาก

Syntax
CONTAINS(<table>, <columnName>, <value>[, <columnName>, <value>]...)

COUNT นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (non-blank) รองรับตัวเลข วันที่ และข้อความ แต่ไม่นับ Boolean ทำงานภายใต้ filter context และเกิด context transition เมื่อใช้ใน row context เหมาะสำหรับนับรายการที่มีข้อมูลในคอลัมน์เฉพาะ แต่ควรใช้ COUNTROWS แทนเมื่อนับแถวทั้งหมด

Syntax
COUNT(<column>)

COUNTAX ประเมินนิพจน์ต่อแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่าง เหมาะกับการนับค่าที่อาจเป็นข้อความ ตรรกะ หรือนิพจน์ที่ซับซ้อน ไม่ใช่แค่ตัวเลข

Syntax
COUNTAX(<table>, <expression>)

COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ

Syntax
COUNTROWS(<table>)

COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ

Syntax
COUNTX(<table>, <expression>)

CROSSFILTER กำหนดทิศทางการกรองข้ามความสัมพันธ์ระหว่าง 2 คอลัมน์ชั่วคราว (มักใช้ใน CALCULATE) เพื่อควบคุมการไหลของตัวกรองหรือปิดการกรองข้ามในบางการคำนวณ

Syntax
CROSSFILTER(<LeftColumnName>, <RightColumnName>, <CrossFilterType>)

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

Syntax
CROSSJOIN(<table1>, <table2>[, <table3>]...)

CURRENCY แปลงค่าตัวเลขให้เป็นชนิด Currency โดยเก็บเลขทศนิยมเพียง 4 ตำแหน่ง เหมาะสำหรับการคำนวณค่าเงินที่ต้องความแม่นยำในการปัดเศษ

Syntax
CURRENCY(<value>)

CUSTOMDATA ดึงข้อความ Custom Data ที่แนบมากับการเชื่อมต่อ (เช่นค่า user role, region, หรือ token จากแอป) เพื่อนำไปใช้ใน Measure หรือ RLS ช่วยสร้างเงื่อนไขตามบริบทผู้ใช้โดยไม่ต้องแก้โมเดล

Syntax
CUSTOMDATA()

DATATABLE สร้างตารางแบบ hardcode ด้วยข้อมูลคงที่ โดยระบุชื่อคอลัมน์ ชนิดข้อมูล และค่าของแต่ละแถว เหมาะสำหรับตารางอ้างอิงเล็กๆ เช่น lookup table หรือข้อมูลตัวอย่าง

Syntax
DATATABLE(<Name>, <DataType>, [<Name>, <DataType>, ...], <Data>)

DATE สร้างค่าวันที่จากตัวเลข Year/Month/Day แล้วคืนค่าเป็นชนิด datetime เหมาะกับการประกอบวันที่จากคอลัมน์แยกส่วนหรือสร้างวันที่อ้างอิง เช่น วันแรกของเดือน วันตัดยอด

Syntax
DATE(<Year>, <Month>, <Day>)

DATEADD คืนค่าตารางวันที่ ที่ถูกเลื่อนออกไปจากช่วงวันที่ใน Context ปัจจุบัน ตามจำนวน (NumberOfIntervals) และหน่วย (Interval) ที่กำหนด เช่น เลื่อนย้อนหลัง 1 เดือน หรือเลื่อนไปข้างหน้า 1 ปี

Syntax
DATEADD(Dates, NumberOfIntervals, Interval)