DAX Function RANKX พร้อมตัวอย่างการใช้งาน

บทความโดย: 9Expert Team

DAX Function RANKX พร้อมตัวอย่างการใช้งาน

แนะนำการใช้งานฟังก์ชัน RANKX ซึ่งเป็นฟังก์ชันของ DAX (Data Analysis Expression) สามารถใช้งานใน Power BI, Power Pivot ของ Excel และ SSAS ได้ พร้อมตัวอย่างการใช้งานและไฟล์ตัวอย่างให้ Download

9Expert Team 1 นาที

Function RANKX

ใช้สำหรับการหาลำดับ Expression ในแต่ละแถวของตารางที่กำหนด เช่น ต้องการดูว่าสินค้าใดขายดีในลำดับเท่าไหร่ตามยอดขาย เป็นต้น

รูปแบบของ Syntax

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

table คือ ชื่อของตารางที่มีข้อมูลเพื่อจะทำการหาลำดับ
expression คือ คำสั่ง expression ที่จะใช้ในการคืนค่า 1 ค่า (single scalar value) เพื่อทำการตรวจสอบแต่ละ Row ใน Table เพื่อดูค่าของลำดับ (Ranking)
value นั้น โดยส่วนใหญ่จะไม่ระบุค่านี้ จะใช้เมื่อมีการนำเอาค่าไปเปรียบเทียบเพิ่มเติม จะส่งผลต่อลำดับที่ได้
order คือ การระบุประเภทของการเรียงลำดับว่าจากมากไปน้อย หรือ จากน้อยไปมาก

0 หรือ FALSE คือเรียงจากมากไปน้อย โดยค่าที่มากสุดจะได้ RANKX เท่ากับ 1

(เป็นค่าตั้งต้น กรณีไม่ได้ระบุค่านี้)

1 หรือ TRUE คือเรียงจากน้อยไปมาก โดยค่าที่น้อยสุดจะได้ RANKX เท่ากับ 1

ties คือ กำหนดค่าจะให้เรียงลำดับในกรณีมีค่าเท่ากันอย่างไร โดยมีรูปแบบด้วยกัน 2 ลักษณะ คือ

Skip คือ หากมีค่าซ้ำในลำดับที่ 11 เหมือนกัน 5 รายการ ก็จะแสดงลำดับถัดไป คือ ลำดับที่ 16 (11+5)

(เป็นค่าตั้งต้น กรณีไม่ได้ระบุค่านี้)

Dense คือ หากมีค่าซ้ำในลำดับที่ 11 เหมือนกัน 5 รายการ ก็จะแสดงลำดับถัดไป คือ ลำดับที่ 12

การคืนค่า

ผลลัพธ์เป็นค่า 1 ค่า (single scalar value)

ตัวอย่างเช่น

หากเรามีข้อมูล Table Sales ในรูป

Table Sales มีข้อมูล ID, OrderDate, ProductCode, Quantity, CostPrice, UnitPrice, Category

เราสามารถสร้าง Measure เพื่อคำนวณหาลำดับการขายในแต่ละ Product และในแต่ละ Category ได้ดังนี้

RankByCategory = RANKX(ALL(Sales[Category]),[Total Sales],,DESC)
//คำนวณลำดับยอดขายตามรายการสินค้า Category

RankByProduct = RANKX(ALL(Sales[ProductCode]),[Total Sales],,DESC)
//คำนวณลำดับยอดขายตามรายการสินค้า Product Code โดยหากมีลำดับเท่ากันจะข้ามลำดับที่ซ้ำไป เช่นในรูปมีสินค้าลำดับที่ 1 จำนวน 2 รายการ ก็จะแสดงลำดับถัดไปเป็นลำดับที่ 3 เป็นต้น

RankByProductDense = RANKX(ALL(Sales[ProductCode]),[Total Sales],,DESC,Dense)
//คำนวณลำดับยอดขายตามรายการสินค้า Product Code โดยหากมีลำดับเท่ากันจะไม่ข้ามลำดับ เช่นในรูปมีสินค้าลำดับที่ 1 จำนวน 2 รายการ ก็จะแสดงลำดับถัดไปเป็นลำดับที่ 2 เป็นต้น

โดย Total Sales = SUM(Sales[SaleAmount])

RANKX กับการกำหนดค่า Skip หรือ Dense ให้กับ Measure

โดย Measure ดังกล่าวสามารถนำไปใช้คำนวณได้กับ Dimension ที่ต้องการ โดยดังแสดงในตัวอย่างนี้ อีกทั้งจะยังคงคำนวณอัตโนมัติ เมื่อมีการ Filter จาก Slicer อีกด้วย เช่น จากในภาพจะเป็นการคำนวณลำดับการขายสินค้า โดยแสดงเฉพาะ Beverages และ Meat/Poultry ตามที่มีการเลือก Slicer ของ Category ที่กำหนด

ตัวอย่างการใช้งาน RANKX

ตัวอย่างการใช้งาน RANKX เพื่อคำนวณ RankByProduct และ RankByCategory

อ้างอิงจากเว็บไซต์ Microsoft

https://docs.microsoft.com/en-us/dax/rankx-function-dax

หลักสูตรที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง