top of page
6. Case Study Part 1
Practical Case Studies

လက်တွေ့ဥပမာများ မလေ့လာမီ RANKX Formula ကို ဦးစွာလေ့လာပါမည်။ RANKX Formula အား ကိန်းဂဏန်းတန်ဖိုးများအား ကြီးစဉ်ငယ်လိုက် (သို့မဟုတ်) ငယ်စဉ်ကြီးလိုက် နံပါတ်စဉ်များရရှိရန် အသုံးပြုနိုင် သည်။

Syntax:

RANKX( Table, Expression , [Value], [Order], [Ties]) 

RANKX Formula တွင် Argument ငါးခုပါရှိသည်ဖြစ်ရာ Table နှင့် Expression Argument များသည် မဖြစ်မနေ ထည့်သွင်းရေးသားရမည် ဖြစ်ပြီး အခြား Argument များသည် လိုအပ်မှသာ ထည့်သွင်းရေးသား နိုင်သည်။

အထက်ပါ Pivot Table တွင် Region အားလုံး၏ Rank မှာ 1 ဖြစ်နေသည်ကို တွေ့ရပါမည်။ အဘယ် ကြောင့် ဆိုသော် Customer Table အား Pivot Table ၏ သက်ဆိုင်ရာ Row တန်ဖိုးများမှ Filter စစ်လိုက် ခြင်းကြောင့်ဖြစ်သည်။ ဥပမာ အထက်ပါ Pivot Table တွင် Bago Row အတွက် တွက်ချက်ရန် Customer Table အား Filter စစ်ထုတ်လိုက်သည့်အခါ RANKX Formula ၏ Customer Table တွင် Bago တန်ဖိုးတစ်ခုတည်းသာ ရှိနေပါမည်။ ထိုတန်ဖိုးတစ်ခု တည်းကိုသာ Rank ပြန်စီသည့်အတွက် 1 သာ ရရှိ ခြင်း ဖြစ်သည်။

အမှန်မှာ Bago တန်ဖိုးကို Region အားလုံး၏ တန်ဖိုးများနှင့်တိုက်ဆိုင်စစ်ဆေး၍ Rank စီရမည် ဖြစ်ရာ RANKX Formula ၏  Customer Table တွင် Region အားလုံး၏ တန်ဖိုးများ ရှိနေရန် လိုအပ်သည်။ ထို့အတွက် Customer Table အား Pivot Table ၏ Filter များ သက်ရောက်နိုင်မှု မရှိနိုင်စေရန် ALL Formula ဖြင့် ဝန်းရံရေးသားပါမည်။

Rank:=RANKX(ALL(Customer[Region]),[Total Qty])

9.4 RANKING Examples

အထက်ပါ Pivot Table တွင် Grand Total ၌ Rank မပေါ်တော့သည်ကို တွေ့ရပါမည်။ ရေးသားခဲ့သည့် Formula ၏ အဓိပ္ပါယ်မှာ Region တစ်ခုတည်းရှိသည့် Row ကိုသာ Rank စီမည်ဟု HASONEVALUE ကို အသုံးပြု စစ်ဆေးရေးသားခြင်းဖြစ်သည်။ Grand Total တွင် Region အားလုံးရှိနေမည်ဖြစ်ရာ တန်ဖိုး တစ်ခုတည်း မဟုတ်သည့်အတွက် Rank ကို မတွက်ချက်ခြင်း ဖြစ်သည်။

အထက်ပါ Pivot Table တွင် မှန်ကန်ပြည့်စုံသည့် Rank များရရှိပြီး ဖြစ်သော်လည်း Region များကို အောက်ပါအတိုင်း Slicer ဖြင့် စစ်ထုတ်လိုက်သည့်အခါ Rank များ မှာ လိုချင်သည့်အတိုင်း မရသည်ကို တွေ့ရှိရပါမည် ။

RANKX Formula တွင် Measure အစား Formula တိုက်ရိုက်ရေးသားခြင်း

ပြီးခဲ့သည့် သင်ခန်းစာများတွင် RANKX Formula အတွင်း၌ Measure အား ထည့်သွင်း အသုံးပြုခဲ့ခြင်း ဖြစ်သည်။ ယခုဥပမာတွင် Measure အစား Formula ကို အောက်ပါအတိုင်း တိုက်ရိုက်ထည့်သွင်း ရေးသားပါမည် -

=IF(HASONEVALUE(Customer[Region]),

RANKX(ALLSELECTED(Customer[Region]), SUM(Sale[Quantity]), BLANK())

image146.png
image147.png

အထက်ပါ Pivot Table တွင် မှန်ကန်သည့် Ranking များ ရရှိနေပြီ ဖြစ်သော်လည်း Grand Total တွင် 1 ဟု ပေါ်နေသည် ဖြစ်ရာ ထို 1 မပေါ်ရန် အတွက် အောက်ပါအတိုင်း ပြောင်းလဲ ရေးသားပါမည် -

Rank:=IF(HASONEVALUE(Customer[Region]), 

RANKX(ALL(Customer[Region]), [Total Qty]), BLANK())

image148.png
image149.png

အထက်ပါ Pivot Table တွင် Slicer တွင် ရွေးချယ်သည့် Region များကိုသာ Rank စီလိုသည် ဖြစ်သော် လည်း မူလ Region အားလုံးနှင့် နှိုင်းယှဉ်၍သာ Rank သတ်မှတ်တွက်ချက်ထားခြင်းဖြစ်သည်။ ထို့ကြောင့် Pivot Table အတွင်းတွင် ရှိနေသည့် Region များအပေါ်တွင်သာ Ranking သတ်မှတ်တွက် ချက်ပေးနိုင်ရန်အတွက် ALL နေရာတွင် ALLSELECTED အစားထိုး၍ အောက်ပါအတိုင်း အသုံးပြုရေးသားပါမည်။

=IF(HASONEVALUE(Customer),

         RANKX(ALLSELECTED(Customer[Region]),[Total Qty]),  BLANK())

image150.png

အထက်ပါ Pivot Table တွင် မြင်တွေ့ရသည့်အတိုင်း Rank များမှာ အားလုံး 1 ဖြစ်နေပါမည်။ အဘယ် ကြောင့်ဆိုသော် အထက်ပါ Formula တွင် ရေးသားချက်အရ Customer Table ၏ Row တစ်ခုစီတွင် Sale Table ၏ Quantity Column ကို ပေါင်းရန် ရေးသားခြင်းဖြစ်ရာ သက်ဆိုင်သည့် Row Context မရှိခြင်းကြောင့် စုစုပေါင်း တန်ဖိုးသာ ပြန်လည်ရရှိခြင်းဖြစ်သည် ။ ရလဒ်ကို အောက်ပါအတိုင်း မှန်းဆ စိတ်ကူးယဉ်ကြည့်နိုင်သည် -

image151.png
table.png

ထို့ကြောင့် Row တစ်ခုစီရှိ Region အမည်များကို Sale Table အား Filter စစ်ထုတ်တွက်ချက်နိုင်စေရန် လက်ရှိ Row Context အား Filter Context အဖြစ် ပြောင်းလဲစေရန်အတွက် Context Transition ဖြစ်ပေါ်စေနိုင်သည့် CALCULATE Formula ကို အသုံးပြု၍ အောက်ပါအတိုင်း ပေါင်းစပ်ရေးသား ပါမည် -

=IF(HASONEVALUE(Customer[Region]),

RANKX(ALLSELECTED(Customer[Region]), CALCULATE(SUM(Sale[Qty])),

            BLANK())

image152.png

Column တစ်ခုအား တိုက်ရိုက် Ranking သတ်မှတ်ခြင်း

Product Table ၏ Price Column အား Ranking သတ်မှတ်လိုသည် ဆိုပါစို့။ Calculated Column တွင် အောက်ပါအတိုင်း ရေးသားမည်ဟု ဦးစွာ စဉ်းစားမိနိုင်ပါသည် -

=RANKX( ALL(Product), Product[Unit Price])

သို့ရာတွင် Expression Argument ရေးသားရာတွင် တန်ဖိုးတစ်ခုတည်း ရရှိသည့် Formula ရေးသား ရမည် ဖြစ်ရာ အထက်ပါကဲ့သို့ Column အမည် တိုက်ရိုက်ရေးသား၍ မရပါ။ ထို့ကြောင့် တန်ဖိုးတစ်ခုတည်း ရရှိစေရန် SUM Formula ဖြင့် ဝန်းရံ ရေးသားပါမည်။

=RANKX( ALL(Product), SUM(Product[Unit Price]))

သို့ရာတွင် ဤသို့ ပြောင်းလဲ ရေးသားသည့်တိုင် အဖြေမှန် ရရှိဉီးမည် မဟုတ်ပါ။ အဘယ်ကြောင့်ဆိုသော် အထက်က ဥပမာတွင် ရှင်းပြခဲ့သည့်အတိုင်း Measure အစား Formula ကို တိုက်ရိုက်ရေးသားသည့်အခါ Row Context / Filter Context များ မရှိသည့်အတွက် သက်ဆိုင်ရာ Product တန်ဖိုးများအလိုက် ပြောင်းလဲ မရရှိပဲ စုစုပေါင်း Grand Total များသာ ရရှိမည်ဖြစ်သည်။ ထို့ကြောင့် သက်ဆိုင်ရာ တန်ဖိုး များအလိုက် ပြောင်းလဲရရှိရန် Filter Context ဖြစ်ပေါ်စေသည့် CALCULATE Formula ဖြင့်တွဲစပ်အသုံးပြုရမည်ဖြစ်သည်။ ထို့ကြောင့် Formula ကို အောက်ပါအတိုင်း ပြောင်းလဲ ရေးသားပါမည် -

=RANKX( ALL(Product), CALCULATE( SUM(Product[Unit Price])))

image153.png

အကယ်၍ Rank 1 ပြီးလျင် 4 မလာပဲ 2 သာရရှိလိုလျင် Ties Arguemnt နေရာတွင် Dense ဟု ရေးသား ရမည် ဖြစ်သည်။ Ties Arguemnt ကိုသာ ရေးသားလိုပြီး ကြားထဲမှ Argument များကို မရေးသားလို သည့်အတွက် Ties Argument ကို ရောက်ရှိရန် Comma များ ရေးသားခဲ့ရမည် ဖြစ်သည်။

=RANKX(ALL('Product'),CALCULATE(SUM('Product'[Unit Price])), , , Dense)

image154.png

အကယ်၍ ကြီးစဉ်ငယ်လိုက်မဟုတ်ပဲ ငယ်စဉ်ကြီးလိုက် Rank သတ်မှတ်လိုပါက Order Argument နေရာတွင် TRUE ဟု ရေးသားရမည် ဖြစ်သည်။

=RANKX(ALL('Product'),CALCULATE(SUM('Product'[Unit Price])), , TRUE, Dense)

image155.png

နောက်ပိုင်း DAX Version များ တွင် Order နေရာ၌ TRUE , FALSE အစား ASC , DESC စသဖြင့် ပြောင်းလဲသတ်မှတ်သော်လည်း TRUE, FALSE များကို ဆက်လက် အသုံးပြုနိုင်သည်။

ဤစာမျက်နှာတွင်ပါဝင်သည့် ခေါင်းစဉ်များ
ဆက်လက်လေ့လာရမည့် သင်ခန်းစာ

Table             -           Table အမည် (သို့မဟုတ်) Table ပြန်ရသည့် DAX Formula

Expression    -           ကိန်းဂဏန်းတန်ဖိုး အဖြေတစ်ခုပြန်ရစေသည့်  DAX Formula

( ဤအဖြေသည် Table ၏ Row တစ်ခုစီတွင် သက်ဆိုင်ရာတန်ဖိုးများ ပြောင်းလဲ တွက်ချက်ပေးသွားမည်ဖြစ်သည်။)

Value        -           Expression မှ Table ၏ တစ် Row စီတွင် တွက်ချက်ထားသည့် တန်ဖိုးများ ထဲတွင် Ranking တန်ဖိုးသွားရှာမည့် ကိန်းဂဏန်းတန်ဖိုး ပြန်ရစေလို သည့် DAX Formula ( ဤ Argument အား ထည့်သွင်းမရေးသားလျင် Expression Argu-ment ၏ တန်ဖိုးများကို သာ Ranking အတွက် အသုံးပြုသွားမည် ဖြစ်ပါသည်။)

Order             -           Ranking အား ကြီးစဉ်ငယ်လိုက် သတ်မှတ်လိုလျင် 0 (သို့မဟုတ်) FALSE ဟု ရေးသားရမည် ဖြစ်ပြီး ငယ်စဉ်ကြီးလိုက် သတ်မှတ်လိုလျင် TRUE ဟု သတ်မှတ် ရေးသာရမည် ဖြစ်သည်။ ( ဤ Argument အား ထည့်သွင်းမရေးသားလျင် FALSE ဟု မှတ်ယူပြီး ကြီးစဉ်ငယ်လိုက် သတ်မှတ်သွားမည် ဖြစ်သည်။ )

Ties                -           ထပ်ပါနေသော ကိန်းဂဏန်းများ၏ Rank အစဉ်အား ကျော်၍ သတ်မှတ်လိုလျင် ဤ Argument နေရာတွင်  Skip ဟု ရေးသားရမည် ဖြစ်ပြီး အကယ်၍ ကိန်းဂဏန်းတန်ဖိုး များ ထပ်ပါနေသော်လည်း မူလ Rank အစဉ်အတိုင်းသား သတ်မှတ်လိုလျင် Dense ဟု ရေးသားရမည် ဖြစ်သည်။

ဥပမာ 26 , 27 , 27  ဟူသည့် ကိန်းဂဏန်းတန်ဖိုးများကို Ranking သတ်မှတ်လိုသည် ဆိုပါစို့ ၊ 27 သည် နှစ်ကြိမ်ပါနေသောကြောင့် 27 ၏ Rank သည် 1 ဖြစ်၍ 26 ၏ Rank သည် 3 ဖြစ်စေလိုလျင် Skip ဟု ရေးသားရမည် ဖြစ်သည်။ 26 ၏ Rank အား 2 ဟု ပြန်လည်ရရှိလိုလျင် Dense ဟု ရေးသားရမည် ဖြစ်သည်။ ( ဤ Argument အား ထည့်သွင်းမရေးသားလျင် Skip အဖြစ် သတ်မှတ် တွက်ချက်ပေးသွားမည် ဖြစ်သည်။ )

လက်တွေ့ Ranking ဥပမာများ

လေ့ကျင့်ခန်းတွင် အသုံးပြုနိုင်ရန်အတွက်Total Qty ဟူသည့် Measure အား အောက်ပါ အတိုင်း ဉီးစွာ ရေးသားထားပါမည် -

Total Qty := SUM( Sale[Quantity] )

ရောင်းချထားသည့် အရေအတွက်အလိုက် Region များကို Ranking စီလိုသည် ဆိုပါစို့။ အောက်ပါအတိုင်း Formula ရေး၍ Pivot Table သို့ထည့်သွင်းပါမည်။

Rank := RANKX(Customer,[Total Qty])

bottom of page