MEDIANX คำนวณค่ามัธยฐาน (50th Percentile) ของนิพจน์ที่ประเมินในแต่ละแถว ต่างจาก MEDIAN ที่ทำงานบนคอลัมน์เดียว MEDIANX คือ iterator function ที่ให้คุณสร้างนิพจล์ซับซ้อนก่อนหาค่ากลาง
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| Table | table | ไม่มี | ตารางข้อมูลที่จะประเมินนิพจน์สำหรับแต่ละแถว หรือ expression ที่ส่งคืนตาราง |
| Expression | expression | ไม่มี | นิพจน์ (expression) ที่ประเมินแต่ละแถว สามารถเป็นการอ้างอิงคอลัมน์เดียว คำนวณ เช่น Sales[Qty]*Sales[Price] หรือ RELATED columns |
MEDIANX เป็น iterator function ที่หาค่ามัธยฐาน (50th percentile) ของนิพจน์ที่คำนวณในแต่ละแถว มันทำงานโดยประเมิน Expression สำหรับแต่ละแถวในตาราง แล้วจึงหาค่ากลางของผลลัพธ์ทั้งหมด
ที่เจ๋งของ MEDIANX คือมันเป็น iterator – คุณสามารถคำนวณอะไรก็ได้ก่อนหาค่าเฉลี่ย เช่น Quantity * Price, Discount Amount, หรือแม้แต่ RELATED columns จากตารางอื่น และ MEDIANX รวม BLANK ในการคำนวณ (ต่างจาก MEDIAN ที่ละเว้น BLANK) ซึ่งมีความสำคัญเมื่อข้อมูลไม่สมบูรณ์
ส่วนตัวผมถือว่า MEDIANX เป็นเครื่องมือการวิเคราะห์ที่ดีกว่า AVERAGE ในสถานการณ์ที่มี outliers เพราะ median ไม่ว่อกว่าด้วยค่าเอกโพท ใช้มันเมื่อต้องการค่ากลางที่ robust มากขึ้น
MEDIANX ประเมินนิพจน์ Quantity * Price สำหรับแต่ละแถว 50% ของแถวมีค่าต่ำกว่า 4,250 และ 50% สูงกว่า ใช้ VAR เพื่อเก็บค่า median ไว้ใช้งาน
MEDIANX ทำงานกับ FILTER ได้อย่างดี แม้ว่าตาราง Sales จะ filtered หลาย records MEDIANX ยังประเมินนิพจน์ในแต่ละแถวของตาราง filtered ก่อน เหตุผลคือ FILTER สร้างบริบท row context ใหม่ แล้ว MEDIANX ประเมิน expression ในบริบทนั้น
สำคัญ: ถ้า NetAmount มี BLANK ค่าเหล่านั้นจะรวมในการคำนวณ มัธยฐานตั้งอยู่ที่ 2,100 ซึ่งอาจแตกต่างจากผลลัพธ์ของ MEDIAN ที่ละเว้น BLANK
ใช้ HASONEVALUE ตรวจสอบว่าเลือก category เพียง 1 อัน ถ้าใช่ ให้คำนวณ median ของการขายในหมวดหมู่นั้น โดย FILTER + ALL เพื่อให้ดึงแถวทั้งหมด แล้วกรองด้วย RELATED ยุ่งแล้ว แต่ RAW ของการทำงานกับบริบท
MEDIAN ทำงานบนคอลัมน์เดียว และละเว้น BLANK ส่วน MEDIANX เป็น iterator function ที่ประเมินนิพจน์ในแต่ละแถว และ รวม BLANK ในการคำนวณ ตัวอย่างเช่น MEDIAN(Sales[Price]) ประเมินเฉพาะราคา ส่วน MEDIANX(Sales, Sales[Qty]*Sales[Price]) คำนวณ Quantity*Price ก่อน แล้วจึงหาค่าเฉลี่ย
เนื่องจาก MEDIANX เป็น iterator function ที่เหมาะสำหรับ expressions ที่ซับซ้อน บางครั้ง expression ของคุณอาจส่งคืน BLANK ตั้งใจหรือไม่ตั้งใจ MEDIANX รักษา BLANK ไว้ในสถิติจึงเป็นพฤติกรรมปกติของ iterator functions (เช่น SUMX, AVERAGEX) ส่วน MEDIAN เป็นการรวม aggregate ที่ขัดเกาะ BLANK
MEDIANX ประเมิน Expression ในแต่ละแถว ซึ่งหมายถึง row context นี่เป็นจุดแข็งของ iterator function บริบทแถว (row context) ให้ acccess ไปยัง values ของแถวนั้นเท่านั้น ถ้าต้องการกำหนด filter สำหรับตาราง ใช้ FILTER() เข้ากับ MEDIANX เช่น MEDIANX(FILTER(Sales, Sales[Year]=2024), Sales[Amount]) ซึ่ง row context จาก FILTER จะนำไปสู่การประเมิน Amount สำหรับแถวที่ 2024 เท่านั้น
ได้ แต่ต้องมานี้เล็กน้อย MEDIANX คำนวณค่า single median สำหรับชุด rows ถ้าต้องการ median ต่อ category ต้องใช้ SUMPRODUCT + FILTER หรือ วิธีอื่นเช่น SUMMARIZECOLUMNS ผมแนะนำให้ใช้วิธี grouping ด้วยการคำนวณด้านหน้า (เช่น pivot table) แล้วค่อย MEDIANX บนผลลัพธ์
ฟังก์ชันที่ผู้เขียนโยงไว้กับ MEDIANX จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
AVERAGEX เป็น Iterator Function ที่วนลูปตารางทีละแถว คำนวณ Expression แล้วนำผลลัพธ์มาหาค่าเฉลี่ย เหมาะสำหรับกรณีที่ต้องการเฉลี่ยค่าที่คำนวณได้ เช่น ราคา×จำนวน หรือค่าเฉลี่ยของ Measure ในแต่ละกลุ่ม
COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ
SUMX เป็น iterator function ที่ทรงพลังใน DAX ออกแบบมาเพื่อวนลูปทีละแถวในตารางที่กำหนด แล้วคำนวณ expression ที่ซับซ้อนสำหรับแต่ละแถวก่อนนำผลลัพธ์ทั้งหมดมารวมกัน ต่างจาก SUM ที่รวมเฉพาะค่าใน column เดียว SUMX สร้าง row context สำหรับแต่ละแถว ทำให้สามารถคำนวณ expression อย่าง Quantity × Price หรือใช้ RELATED ดึงข้อมูลข้ามตารางได้ มีกลไก context transition อัตโนมัติเมื่อเจอ measure ในนั้น เหมาะสำหรับการคำนวณซับซ้อนระดับแถวข้อมูล ประหยัดพื้นที่ model เพราะไม่ต้องสร้าง calculated column แต่ช้ากว่า SUM และไม่รองรับ DirectQuery mode ใน calculated columns หรือ RLS rules
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
PERCENTILEX.INC คำนวณเปอร์เซนไทล์ของค่าที่คำนวณจากการประเมินนิพจน์ในแต่ละแถว โดยใช้วิธี Inclusive ซึ่งจะไม่นับรวมค่า BLANK ต่างจาก PERCENTILEX.EXC ที่รวม BLANK หากข้อมูลมีค่า BLANK มากจะส่งผลต่อผลลัพธ์ ใช้เพื่อหา Percentile Rank เช่น Top 25% ของลูกค้าตามยอดขาย
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่