DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา
Syntax
DATEDIFF(<Date1>, <Date2>, <Interval>)
DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา
DATEDIFF(<Date1>, <Date2>, <Interval>)
DATESBETWEEN คืนตารางวันที่ที่อยู่ระหว่าง StartDate และ EndDate (รวมวันเริ่ม/วันจบ) เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณตามช่วงวันที่ที่กำหนดเอง
DATESBETWEEN(<Dates>, <StartDate>, <EndDate>)
DATESINPERIOD คืนตารางวันที่แบบเคลื่อนที่ โดยเริ่มจาก StartDate และขยายไปตามจำนวนช่วงและหน่วยที่กำหนด เหมาะกับการทำคำนวณแบบ rolling YTD, rolling average, ย้อนหลัง หรือล่วงหน้าแบบยืดหยุ่น
DATESINPERIOD(<Dates>, <StartDate>, <NumberOfIntervals>, <Interval>[, <EndBehavior>])
DATESMTD คืนตารางวันที่ของช่วงตั้งแต่ต้นเดือนถึงวันที่ล่าสุดใน filter context เหมาะกับการทำยอดสะสมตั้งแต่ต้นเดือน (MTD) โดยใช้ร่วมกับ CALCULATE และควรใช้คู่กับ ShowValueForDates pattern เพื่อไม่ให้แสดงค่าในวันที่ยังไม่มีข้อมูล
DATESMTD(<Dates>)
DATESQTD คืนตารางวันที่ของช่วงตั้งแต่ต้นไตรมาสถึงวันที่ล่าสุดในบริบทปัจจุบัน เหมาะสำหรับสร้างมาตรวัด QTD ใน CALCULATE โดยทำงานร่วมกับ Time Intelligence Functions ตัวอื่นๆ ได้ดี และควรใช้คู่กับ ShowValueForDates pattern เพื่อป้องกันการแสดงค่าในอนาคต
DATESQTD(<Dates>)
DATESWTD คืนตารางวันที่ตั้งแต่ต้นสัปดาห์จนถึงวันที่ในบริบทปัจจุบัน ใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อคำนวณยอดสะสมตั้งแต่ต้นสัปดาห์
DATESWTD(<calendar>)
DATESYTD คืนตารางวันที่ของช่วงตั้งแต่ต้นปีถึงวันที่สุดท้ายที่มองเห็นใน Filter Context ใช้เป็นตัวกรองเวลาใน CALCULATE สำหรับการคำนวณยอดสะสมตั้งแต่ต้นปี รองรับทั้งปีปฏิทินและปีบัญชี (Fiscal Year) ด้วย YearEndDate argument
DATESYTD(<Dates>[, <YearEndDate>])
DATEVALUE แปลงข้อความวันที่ (text) ให้เป็น datetime โดยอ้างอิงตามการตั้งค่า locale ของ model เหมาะกับข้อมูลวันที่ที่เก็บเป็นข้อความและต้องแปลงเป็นวันที่จริงเพื่อการคำนวณตามเวลา
DATEVALUE(<DateText>)
DAY คืนค่าเลขวันของเดือนจากค่าวันที่/เวลา (1–31) เป็นฟังก์ชันพื้นฐานสำหรับการวิเคราะห์ตามวันของเดือน การจัดกลุ่ม และการสร้างคอลัมน์ช่วย
DAY(<date>)
DETAILROWS คืนตารางแถวรายละเอียดของ measure ภายใต้บริบทปัจจุบัน เหมาะกับการดูรายละเอียด/ตรวจสอบการคำนวณของ measure
DETAILROWS(<Measure>)
DISTINCT คืนค่าตารางที่มีคอลัมน์เดียว ซึ่งประกอบด้วยค่าที่ไม่ซ้ำกันจากคอลัมน์ที่ระบุ โดยไม่รวม Blank Row ที่เกิดจาก Invalid Relationship ความแตกต่างหลักจาก VALUES คือ DISTINCT จะซ่อน Data Quality Issues ในขณะที่ VALUES จะเตือนให้เห็น
DISTINCT( <column> )
DISTINCTCOUNT นับจำนวนค่าที่แตกต่างกันทั้งหมดในคอลัมน์ รวมถึง BLANK values ถ้าไม่มีแถวข้อมูล จะคืนค่า BLANK
DISTINCTCOUNT(<column>)
DISTINCTCOUNTNOBLANK นับจำนวนค่าที่ไม่ซ้ำในคอลัมน์ โดยไม่รวมค่า BLANK จึงเหมาะกับการนับรายการที่ต้องการตัดค่าว่างออกไป เช่น นับจำนวนลูกค้าที่ไม่ซ้ำโดยไม่ให้ BLANK ถูกนับ
DISTINCTCOUNTNOBLANK(<column>)
DIVIDE ทำการหารพร้อม Alternate Result หากตัวหารเป็นศูนย์หรือ BLANK ช่วยให้ Measure ไม่เกิด error และควบคุมค่าที่ต้องการแสดงได้
DIVIDE(<numerator>, <denominator>, [alternateResult])
EARLIER คืนค่าของคอลัมน์ใน Row Context ชั้นนอก (Outer Row Context) เพื่อให้คอลัมน์คำนวณสามารถอ้างอิงค่า “ของแถวปัจจุบัน” ระหว่างการวนซ้อน (เช่น FILTER ภายใน Calculated Column) ได้
EARLIER(<Column>[, <Number>])
EARLIEST ดึงค่าคอลัมน์จาก row context ชั้นนอกสุดเมื่อสูตรสร้าง row context ซ้อน (เช่น FILTER, RANKX, SUMX ในคอลัมน์คำนวณ) ทำให้ยังเข้าถึงค่าดั้งเดิมของแถวที่กำลังประเมินได้แม้จะเข้าสู่บริบทใหม่
EARLIEST(<column>)
EDATE คืนค่าวันที่ที่ห่างจากวันเริ่มต้นตามจำนวนเดือนที่ระบุ ใช้สำหรับคำนวณวันครบกำหนด หรือวันกำหนดส่งแบบเดือนปกติ
=EDATE(<start_date>, <months>)
ENDOFMONTH คืนตารางวันที่ของวันสิ้นเดือนตามปฏิทิน เหมาะกับ Semi-Additive Calculations เช่น ยอดคงเหลือ, Inventory, หรือ Closing Balance ที่ต้องการ snapshot ณ สิ้นเดือน ไม่ว่าจะมีข้อมูลจริงในวันนั้นหรือไม่
ENDOFMONTH(<Dates>)
ENDOFQUARTER คืนตารางวันที่ของวันสิ้นไตรมาสตามบริบทวันที่ปัจจุบัน เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อประเมินมาตรวัด ณ วันสิ้นไตรมาส
ENDOFQUARTER(<Dates>)
ฟังก์ชัน ENDOFWEEK คืนตารางวันที่ที่แสดงวันสิ้นสุดของสัปดาห์ตามบริบทวันที่ปัจจุบัน ใช้สำหรับการวิเคราะห์ข้อมูลตามระดับสัปดาห์ และการเปรียบเทียบเมตริกส์ณวันปิดสัปดาห์
ENDOFWEEK(<Calendar>)
ENDOFYEAR คืนตารางวันที่ของวันสิ้นปีตามบริบทวันที่ปัจจุบัน และรองรับการกำหนดวันสิ้นปีบัญชี เหมาะกับการใช้เป็นตัวกรองเวลาใน CALCULATE เพื่อประเมินมาตรวัดที่วันสิ้นปี
ENDOFYEAR(<Dates>[, <YearEndDate>])
EOMONTH คืนค่าวันสิ้นเดือนของเดือนที่เลื่อนจาก StartDate ตามจำนวน Months (บวก/ลบได้) เหมาะกับการหาวันปิดงวด วันครบกำหนด และการจัดการช่วงเวลาแบบรายเดือน
EOMONTH(<StartDate>, <Months>)
ERROR ฟังก์ชันที่หยุดการคำนวณและแสดงข้อความข้อผิดพลาดที่กำหนดเอง ใช้สำหรับการตรวจสอบข้อมูล (Data Validation) และจัดการสถานการณ์ที่ข้อมูลไม่ครบถ้วน เช่น ค่า Inflation Rate ที่หายไป หรือค่าจำเป็นที่ไม่พบ แทนการส่งค่าที่ไม่ถูกต้องหรือว่าง
ERROR(<ErrorText>)
EVALUATEANDLOG คำนวณนิพจน์และส่งผลลัพธ์ไปยัง log สำหรับการตรวจสอบและดีบัก ทำให้เห็นค่าระหว่างกลางของการคำนวณ DAX โดยไม่ต้องเขียนตารางชั่วคราว
EVALUATEANDLOG(<expression>)
EXACT เปรียบเทียบ Text1 กับ Text2 แบบตรงตัวและคำนึงถึงตัวพิมพ์เล็ก/ใหญ่ คืน TRUE เมื่อเหมือนกันทุกตัวอักษร เหมาะกับงานตรวจรหัส/ข้อความที่ต้องแยก case
EXACT(<Text1>, <Text2>)
EXCEPT คืนตารางของแถวที่อยู่ใน LeftTable แต่ไม่อยู่ใน RightTable เหมาะกับการหาสิ่งที่ขาดหาย เช่น สินค้าที่ไม่เคยขาย ลูกค้าที่ไม่มีธุรกรรม
EXCEPT(<LeftTable>, <RightTable>)
EXPANDALL นำทางไปยังระดับการแสดงรายละเอียดต่ำสุด (Lowest Detail Level) บนแกน (Axis) ที่ระบุในการคำนวณภาพ (Visual Calculations) ส่งกลับบริบทที่มีระดับรายละเอียดที่เพิ่มเข้ามากำหนดการขยายลำดับชั้น (Hierarchy) ใช้สำหรับการคำนวณที่ต้องเข้าถึงข้อมูลระดับต่ำสุด
EXPANDALL(<Expression>, <Axis>)
EXTERNALMEASURE ใช้สำหรับการวิเคราะห์ข้อมูล DAX
EXTERNALMEASURE(value) as value
FALSE คืนค่าตรรกะ FALSE ใช้เป็นค่าคงที่ใน DAX สำหรับสร้างตรรกะและเงื่อนไข เช่น ใช้กับ IF หรือใช้เป็นค่าตั้งต้นในตัวแปร
FALSE()
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
FILTER(<table>, <filter>)
FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
FILTERS(<column>)
FIND คืนค่าตำแหน่งเริ่มต้นของ FindText ภายใน WithinText (เริ่มนับที่ 1) โดยค้นหาแบบแยกตัวพิมพ์ใหญ่/เล็ก และสามารถระบุ StartNum/NotFoundValue เพื่อควบคุมจุดเริ่มค้นหาและผลลัพธ์เมื่อไม่พบได้
FIND(<FindText>, <WithinText>[, <StartNum>[, <NotFoundValue>]])
FIRST ดึงค่าจากแถวแรก (First Row) บนแกน (Axis) ที่ระบุในการคำนวณภาพ (Visual Calculations) ส่งกลับค่าที่อยู่ตำแหน่งแรกของแกน ใช้เพื่อเปรียบเทียบค่าปัจจุบัน กับค่าต้นตัวของลำดับ หรือดึงมูลค่าเริ่มต้น
FIRST(<Column>, [<Axis>], [<OrderBy>], [<Blanks>], [<Reset>])
FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก
FIRSTDATE(<Dates>)
FIRSTNONBLANK คืนค่าตัวแรกของ Column ที่ทำให้ Expression ไม่เป็น BLANK ใช้บ่อยเพื่อหา "ค่าแรกที่มีข้อมูล" เช่นวันแรกที่มียอดขาย (คืนค่าเป็นวันที่) และมักใช้ร่วมกับ time intelligence
FIRSTNONBLANK(<Column>, <Expression>)
FIRSTNONBLANKVALUE คืนค่าแรกที่ไม่เป็น BLANK ของ Expression เมื่อประเมินตามลำดับของ Column ซึ่งมีประโยชน์ในการหาค่าเริ่มต้นหรือค่าแรกที่มีข้อมูลจริง เช่นยอดขายของวันแรกที่มีการขาย
FIRSTNONBLANKVALUE(<Column>, <Expression>)
FIXED แปลงตัวเลขเป็นข้อความ พร้อมกำหนดจำนวนทศนิยม และเลือกใส่/ไม่ใส่ตัวคั่นหลักพัน เหมาะกับการแสดงผลแบบรูปแบบคงที่
FIXED(<number>[, <decimals>[, <no_commas>]])
FORMAT ใช้แปลงค่า (ตัวเลข วันที่ เวลา) เป็น Text ตามรูปแบบที่ต้องการ เช่น แปลง 0.25 เป็น "25%" หรือ 2025-12-20 เป็น "20/12/2025" โดยสนับสนุน locale ต่างๆ
FORMAT(<value>, <format_string>, [<locale_name>])
GENERATE วนทีละแถวใน Table1 แล้วประเมิน Table2 ในบริบทของแถวนั้น (row context) จากนั้นรวมผลทั้งหมดเป็นตารางเดียว ถ้า Table2 ว่างเปล่าในรอบไหน แถวนั้นจาก Table1 จะถูกตัดออก (ต่างจาก GENERATEALL)
GENERATE(<Table1>, <Table2>)
GENERATEALL วนแถวของตาราง 1 แล้วสร้าง Cartesian product กับผลลัพธ์ของตาราง 2 โดยคงแถวที่ไม่มีข้อมูลย่อย ต่างจาก GENERATE ตรงที่ไม่ตัดแถวหลักออก
GENERATEALL(<table1>, <table2>)
GENERATESERIES สร้างตารางคอลัมน์เดียวที่เป็นลำดับตัวเลขจาก StartValue ถึง EndValue ด้วย increment ที่กำหนดได้ เหมาะกับตารางช่วย parameter table หรือสร้างชุดตัวเลขสำหรับ what-if analysis
GENERATESERIES(<StartValue>, <EndValue>[, <IncrementValue>])
GEOMEANX คำนวณค่าเฉลี่ยเรขาคณิต (Geometric Mean) ของค่าที่คำนวณจากการประเมินนิพจน์ในแต่ละแถว ต่างจาก AVERAGEX ที่คำนวณค่าเฉลี่ยเลขคณิต ค่าเฉลี่ยเรขาคณิตเหมาะสำหรับการคำนวณอัตราการเปลี่ยนแปลง (Rate of Change) หรือการเติบโตแบบทบต้น (Compound Growth) เช่น อัตราผลตอบแทนการลงทุน
GEOMEANX(<Table>, <Expression>)
GROUPBY สร้างตารางสรุปโดยจัดกลุ่มตามคอลัมน์ที่กำหนด และเพิ่มคอลัมน์คำนวณแบบกลุ่มต่อกลุ่มได้ โดยใช้ CURRENTGROUP() เข้าถึงแถวภายในกลุ่ม เหมาะกับการคำนวณซ้อนหรือคำนวณจากคอลัมน์ชั่วคราว (local columns)
GROUPBY(<Table>, [<GroupBy_ColumnName>], [<Name>], [<Expression>])
ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้
HASONEFILTER(<columnName>)
HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้
HASONEVALUE(<columnName>)
IF เป็นฟังก์ชันตรรกะพื้นฐานที่สำคัญที่สุดใน DAX ใช้สำหรับตรวจสอบเงื่อนไข (logical test) แล้วคืนค่าที่แตกต่างกันตามผลลัพธ์ว่าเป็นจริง (TRUE) หรือเท็จ (FALSE) สามารถใช้ได้ทั้งในบริบท calculated column, measure, calculated table และ visual calculation ซึ่งทำให้มีความยืดหยุ่นสูง คืนค่าเป็น scalar value ได้ทุกประเภท ไม่ว่าจะเป็นตัวเลข ข้อความ วันที่ หรือค่า boolean ถ้าไม่ระบุค่าสำหรับกรณีเท็จ (value_if_false) จะคืน BLANK() โดยอัตโนมัติ มีคุณสมบัติพิเศษคือ lazy evaluation behavior ที่ประมวลผลเฉพาะเส้นทาง (branch) ที่ถูกเลือกเท่านั้น ทำให้มีประสิทธิภาพในการทำงานที่ดี แตกต่างจาก Excel IF อย่างชัดเจนตรงที่ใช้รูปแบบอ้างอิงแบบ Table[Column] ทำงานภายใต้ filter context และแยกความแตกต่างระหว่าง BLANK กับ 0 อย่างเข้มงวด
IF(<logical_test>, <value_if_true>[, <value_if_false>])
IF.EAGER ทำงานเหมือน IF แต่ใช้แผน eager ที่อาจประเมินทั้ง value_if_true และ value_if_false ทำให้ควรระวังเรื่อง performance และกรณีที่อีกแขนงอาจเกิด error แม้เงื่อนไขจะไม่เลือกแขนงนั้น
IF.EAGER(<LogicalTest>, <ValueIfTrue>[, <ValueIfFalse>])
IFERROR ใช้ดักจับข้อผิดพลาดในนิพจน์: ถ้า Value เกิด error จะคืนค่า ValueIfError แทน ถ้าไม่เกิด error จะคืนค่าของ Value เดิม เหมาะสำหรับการแปลงชนิดข้อมูล การหารที่อาจเป็นศูนย์ หรือ measure ที่ไม่เสถียร
IFERROR(<Value>, <ValueIfError>)
IGNORE ใช้ภายใน SUMMARIZECOLUMNS เพื่อบอกว่า expression/measure นี้ต้องถูก “ละเว้น” ตอนตัดสินว่าแถวไหนเป็น non-blank ทำให้แถวในผลลัพธ์ไม่ถูกตัดทิ้งเพียงเพราะ measure ที่เลือกละเว้นเป็น BLANK
IGNORE(<Expression>)
INDEX ดึงแถวจากตำแหน่งที่ระบุ (Position) ภายในกลุ่มข้อมูลที่เรียงแล้ว โดยสามารถใช้ ORDERBY และ PARTITIONBY เพื่อควบคุมลำดับและการแบ่งกลุ่ม เหมาะสำหรับงาน window function เช่นดึงค่าอันดับที่ N
INDEX(<Position>, <Relation>[, <OrderBy>[, <PartitionBy>[, <MatchBy>[, <Blanks>[, <Reset>]]]]])