CALCULATE Function
အသုံးဝင်မှုများပြားခြင်းနှင့် ၎င်း၏ အစွမ်းထက်မှုကြောင့် CALCULATE Formula အား Queen of the DAX ဟု ရည်ညွှန်းပြောဆိုလေ့ရှိသည်။ CALCULATE Formula အသုံးပြု၍ Pivot Table ၏ Filter များနေရာတွင် မိမိလိုအပ်သည့် Filter များအတိုင်း အစားထိုးတွက်ချက်နိုင်သည်။
Syntax:
= CALCULATE( Expression , [ Filter1 ], [ Filter2 ],…)
Expression နေရာတွင် တွက်ချက်မည့် Formula (သို့မဟုတ်) Calculated Field အမည်တစ်ခုကို ရေးသား ရမည်ဖြစ်သည်။
Filter နေရာတွင် Formula အတွင်း သတ်မှတ်တွက်ချက်လိုသည့် Filter များကို သတ်မှတ် ရေးသားရမည် ဖြစ်သည်။ Filter နေရာတွင် အောက်ပါ အတိုင်း သတ်မှတ်ရေးသားနိုင်သည် -
-
TRUE or FALSE ပြန်လည်ရရှိသည့် Logical Test ခေါ် Boolean Expression
( ဥပမာ - Customer[Region] = “Yangon” )
-
Table ပြန်ရစေသော (သို့မဟုတ်) Column ပြန်ရစေသော Table Expression
( ဥပမာ - FILTER ( ALL (Customer ), Customer[Region] = “Yangon” )
Yangon မြို့နှင့် သက်ဆိုင်သည့် Profit ကို တွက်ချက်ရန်အတွက် အောက်ပါအတိုင်း Formula ရေးသား၍ Pivot Table အတွင်းသို့ ထည့်သွင်းပါမည် -
YGN Profit:=CALCULATE( [Profit], Customer[Region] = “Yangon” )
အထက်ပါ ပုံတွင် မြင်တွေ့ရသည့်အတိုင်း Yangon နှင့်သက်ဆိုင်သည့် တန်ဖိုးသည် Region အားလုံးတွင် ပေါ်နေပါမည်။ အဘယ်ကြောင့်ဆိုသော် CALCULATE Formula တွင် Filter Argument အဖြစ် Logical Test ရေးသားလျင် ၎င်း Logical Test အား FILTER – ALL Pattern အဖြစ် ပြောင်းလဲ တွက်ချက်ပေးသွားခြင်းကြောင့်ဖြစ်သည်။ ထို့ကြောင့် ဤ ဥပမာတွင် ရေးသားခဲ့သည့် Formula အား အောက်ပါအတိုင်း ပြောင်းလဲ တွက်ချက်ပေးသွားမည် ဖြစ်သည် -
=CALCULATE( [Profit],
FILTER ( ALL (Customer[Region] ), Customer[Region] = “Yangon” ))
DAX မှ ပြောင်းလဲတွက်ချက်သည့် အထက်ပါ Formula အား လေ့လာကြည့်သည့်အခါ ALL Formula သည် Region Column တစ်ခုတည်းကိုသာ ဝန်းရံရေးသားထားသည်ကို တွေ့ရမည် ဖြစ်ပြီး Customer Table တစ်ခုလုံးအား ဝန်းရံရေးသားထားခြင်း မဟုတ်သည်ကို တွေ့ရှိရမည် ဖြစ်ပါသည်။
ဆိုလိုသည်မှာ ALL Formula သည် Region အပေါ်သက်ရောက်သည့် Filter များကိုသာ ဖယ်ရှား မည်ဖြစ်ပြီး Customer Table တစ်ခုလုံးရှိ Filter များကို ဖယ်ရှားမည် မဟုတ်ပါ။
အထက်ပါ Pivot Table ၏ Region အသီးသီးတွင် ၎င်းတို့၏ တန်ဖိုးများ မြင်တွေ့ရမည့်အစား Yangon ၏ တန်ဖိုးများကိုသာ မြင်တွေ့ရခြင်းမှာ Region Column အပေါ်သို့ သက်ရောက်လာသည့် Pivot Table ၏ Filter အားဖယ်ရှားပြီး Yangon တန်ဖိုးများဖြင့်သာ တွက်ချက်ရန် ALL Formula ဖြင့် ရေးသားထားခြင်းကြောင့် ဖြစ်သည်။
သို့သော် ALL သည် Region Column တစ်ခုတည်းကိုသာ ဝန်းရံထားပြီး အခြား Column များအပေါ်တွင် သက်ရောက်မှု မရှိခြင်းကြောင့် အခြား Column များအား Slicer အနေဖြင့် ထည့်သွင်းပါက ရွေးချယ်မှု အလိုက် တန်ဖိုးများပြောင်းလဲသွားမည် ဖြစ်ပါသည်။
Contoso Product ၏ Silver Colour များ၏ Profit တန်ဖိုးများ ရရှိရန် အောက်ပါအတိုင်း ရေးသား နိုင်သည်။
=CALCULATE( [Profit], Product[Brand Name] = “Contoso”, Product[Colour]= “Silver” )
Formula တွင် Filter Argument အနေဖြင့် နှစ်ခုရေးသားထားပြီး ထို Filter Argument များကို CALCULATE Formula မှ AND သဘောတရားဖြင့် ချိတ်ဆက်တွက်ချက်ပေးသွား မည်ဖြစ်ပါသည်။ ဆိုလိုသည်မှာ Contoso Product လည်းဖြစ်၊ Silver Colour ဖြစ်သည့် Product များကို ရွေးချယ် တွက်ချက်ပေးသွားမည် ဖြစ်သည်။
Filter Argument တစ်ခုတွင် Column များ တစ်ခုထက်ပို၍ ရည်ညွှန်းရေးသားလိုပါက Logical Test ဖြင့် တိုက်ရိုက် ရေးသား၍ မရပါ။ FILTER Formula ဖြင့် တွဲစပ်ရေးသားရမည် ဖြစ်ပါသည်။ ဤသင်ခန်း စာတွင် Cost ၏ နှစ်ဆနှင့်အထက် Price များဖြင့် ရောင်းချသည့် Product များ၏ အမြတ်ကို တွက်ချက်ရန် CALCULATE ဖြင့် ရေးသားထားခြင်း ဖြစ်သည်။
=CALCULATE( [Profit], FILTER( Product, Product[Unit Price] >= Product[Unit Cost] * 2 ) )
အထက်ပါ Formula တွင် Filter Argument တစ်ခုတည်း၌ Price Column နှင့် Cost Column နှစ်ခု အား နှိုင်းယှဉ်၍ Filter စစ်ထုတ်ထားခြင်း ဖြစ်သည်။ FILTER Formula ကို အသုံးပြုရေးသားသော် လည်း Table အား ALL ဖြင့် ဝန်းရံရေးသားမထားခြင်းကို သတိပြုမိမည် ထင်ပါသည်။ ထိုကဲ့သို့ ALL Formula အား အသုံးပြုမထားခြင်းကြောင့် Product တစ်ခုချင်းစီအလိုက် သက်ဆိုင်ရာ တန်ဖိုးများ ရရှိ ခြင်းဖြစ်သည်။
FILTER Formula တွင် Table အား ALL ဖြင့် ဝန်းရံရေးသားပါက အောက်ပါ Pivot Table တွင် မြင်တွေ့ရသည့်အတိုင်း Product တစ်ခုချင်းစီတွင် Product အားလုံး၏ စုစုပေါင်းတန်ဖိုးကိုသာ ပြန်လည် ရရှိမည် ဖြစ်ပါသည်။
=CALCULATE( [Profit],
FILTER( ALL(Product), Product[Unit Price] >= Product[Unit Cost] * 2 ) )
CALCULATE Formula တွင် Filter များသတ်မှတ်သည့်အခါ သတ်မှတ်သည့် Filter Argument များကို AND ဖြင့် ချိတ်ဆက်၍ သတ်မှတ်သည့် Filter အားလုံးနှင့်ညီမှ တွက်ချက်ပေးသွားမည်ဖြစ်သည်။ Filter များကို OR ဖြင့် ချိတ်ဆက်သတ်မှတ်ဆောင်ရွက်လိုလျင် Filter Argument တစ်ခုတည်းတွင် OR သို့မဟုတ် || ကို အသုံးပြု ရေးသားနိုင်သည်။
အောက်ပါ Formula တွင် Contoso (သို့မဟုတ်) Proseware Brand များ၏ အမြတ်ကို တွက်ချက် ထားခြင်း ဖြစ်သည်။
=CALCULATE([Profit], 'Product'[Brand Name]="Contoso"||'Product'[Brand Name]="Proseware")
ပြီးခဲ့သည့် ဥပမာများကဲ့သို့ပင် Formula တွင် Logical Test ဖြင့် ရေးသားထားသည်များကို DAX မှ FILTER – ALL Pattern သို့ ပြောင်းလဲတွက်ချက်ပေးသွားမည်ဖြစ်ရာ ယခုရေးသားထားသည့် Formula ကို အောက်ပါအတိုင်း ပြောင်းလဲတွက်ချက်ပေးသွားမည် ဖြစ်သည်။
=CALCULATE([Profit], Filter( All( 'Product'[Brand Name] ),
'Product'[Brand Name]="Contoso"||'Product'[Brand Name]="Proseware"))
သို့ဖြစ်ရာ Contoso နှင့် Proseware ( Brand နှစ်ခုပေါင်း၏ ) စုစုပေါင်းတန်ဖိုးကို Brand အားလုံးတွင် တွေ့မြင်ကြရခြင်းဖြစ်သည်။
ပြန်လည်ရှင်းလင်းရသော် ယခု Formula တွင် Contoso သို့မဟုတ် Proseware ၏ တန်ဖိုးများ စုစုပေါင်း ဟု သတ်မှတ်ခြင်းမှာ Contoso နှင့် Proseware တို့၏ စုစုပေါင်းတန်ဖိုးကိုတွက်ချက်မည်ဟု ဆိုလိုခြင်း ပင်ဖြစ်ပါသည်။ အကယ်၍ Contoso (သို့မဟုတ်) Proseware နှစ်မျိုး၏ တန်ဖိုးကိုသာတွက်ချက်လိုပြီး ထို Brand နှစ်ခု ၏ တန်ဖိုးများသာ Pivot Table တွင် ပေါ်လိုသည်ဆိုပါက အထက်ပါ Formula တွင် အသုံးပြုထားသည့် ALL အား ထည့်သွင်းမရေးသားပဲ FILTER Formula တွင် Product Table အမည်သာ ထည့်သွင်း ရေးသားရမည် ဖြစ်ပါသည်။
=CALCULATE([Profit], Filter( ‘Product’,
'Product'[Brand Name]="Contoso"||'Product'[Brand Name]="Proseware"))
8.1 Filtering Single Column


8.2 Filtering Multiple Columns from Single Table

DAX မှ အထက်ပါ Formula အား အောက်ပါအတိုင်း ပြောင်းလဲတွက်ချက်ပေးသွားခြင်း ဖြစ်သည်။
=CALCULATE( [Profit],
FILTER ( ALL (Product[Brand Name] , Product[Colour]),
AND( Product[Brand Name] = “Contoso”, Product[Colour]= “Silver” )))
8.3 Filtering Columns from Different Table
မတူညီသော Table များမှ Filter များကိုလည်း CALCULATE Formula တွင် တိုက်ရိုက်အသုံးပြုနိုင် သည်။ RELATED Formula များဖြင့် ချိတ်ဆက်ရန် မလိုအပ်ပါ။
ဤဥပမာတွင် ရန်ကုန်မြို့တွင်ရောင်းချသည့် Contoso Product များ၏ တန်ဖိုးများအား ရှာဖွေထားခြင်း ဖြစ်သည်။
=CALCULATE( [Profit], Customer[Region] = “Yangon”, Product[Brand Name] =“Contoso” )

8.4 Referring Multiple Columns in ONE Filter Argument


8.5 OR Conditions


8.6 Context Transition
CALCULATE Formula သည် Row Context မှ Filter Context သို့ ပြောင်းလဲပေးစေနိုင်ပြီး ထိုသို့ ပြောင်းလဲသည့် ဖြစ်စဉ်ကို Context Transition ဟု ခေါ်ဆိုသည်။ အောက်ပါဥပမာတွင် Product Table ၌ Calculated Column တစ်ခုတွင် Sale Table ၏ Row အရေအတွက်ကို တွက်ချက်ထားခြင်းဖြစ် သည်။
ဤစာမျက်နှာတွင်ပါဝင်သည့် ခေါင်းစဉ်များ
ဆက်လက်လေ့လာရမည့် သင်ခန်းစာ

ပုံတွင် မြင်တွေ့ရသည့်အတိုင်း Row အားလုံးတွင် စုစုပေါင်း တန်ဖိုးတစ်ခုတည်းကိုသာ ရရှိမည် ဖြစ်သည်။ ထို့ကြောင့် Current Row အား Row Context မှ Fitler Context အဖြစ် CALCULATE Formula အသုံးပြု၍ အောက်ပါအတိုင်း ပြောင်းလဲပါမည်။

CALCULATE Formula သည် လက်ရှိ Row ၏ Row Context အား Filter Context အဖြစ် ပြောင်းလဲ လိုက်သောကြောင့် Sale Table တွင် ( Product Table ၏ ) လက်ရှိ Row နှင့်သက်ဆိုင်သည့် တန်ဖိုးများကို Filter စစ်ထုတ် တွက်ချက်သွားမည်ဖြစ်သည်။ ထိုသို့တွက်ချက်ခြင်းကြောင့် အထက်ပါပုံတွင် လက်ရှိ Row တွင်ရှိသော Product ၏ Sale Table တွင်ပါဝင်သော အကြိမ်အရေ အတွက်၊ တစ်နည်းအားဖြင့် Row အရေအတွက်ကို ရရှိခြင်းဖြစ်သည်။
CALCULATE Formula ရေးသားရာတွင် အောက်ပါ အချက်များ သတိပြုရမည် ဖြစ်ပါသည် -
-
Filter Argument နေရာများတွင် Filter များ လိုအပ်သလောက် သတ်မှတ်ရေးသားနိုင်ပြီး ထိုသတ်မှတ်သည့် Filter များအားလုံးဖြင့် ကိုက်ညီသည့် တန်ဖိုးများကို စစ်ထုတ်တွက်ချက် ပေးမည် ဖြစ်သည်။
-
Filter Argument ရေးသားရာတွင် Boolean Expression ရေးသားခြင်းသည် ALL ကို အသုံးပြု ရေးသားခြင်းနှင့် အတူတူပင်ဖြစ်သည်။
-
ဥပမာ =CALCULATE( [Profit], Customer[Region] = “Yangon” ) ဟု ရေးသား ခြင်းကို DAX မှ တွက်ချက်ရာတွင် အောက်ပါအတိုင်း ပြောင်းလဲ တွက်ချက်သွားမည် ဖြစ်သည်။
=CALCULATE( [Profit],
FILTER ( ALL (Customer[Region] ), Customer[Region] = “Yangon” ))
-
CALCULATE Formula သည် Row Context များအား Filter Context အဖြစ် အလိုအလျောက် ပြောင်းလဲတွက်ချက်ပေးသွားမည် ဖြစ်ပြီး ထိုသို့ Context ပြောင်းလဲတွက်ချက် ခြင်းကို Context Transition ဟု ခေါ်ဆိုသည်။
-
CALCULATE Formula သည် Table များတွင် Filter Context သက်ရောက်ခြင်းကြောင့် RELATED Formula ဖြင့် ချိတ်ဆက်ရေးသားရန်မလိုအပ်ပါ။ ( RELATED Formula ကို အခြား Tableများ၏ Column များ ယူသုံးတွက်ချက်ရာတွင် Row Context ပေါ်ပေါက်စေရန် ရေးသားရခြင်းဖြစ်သည်။ CALCULATE Formula သည် Row Context အား Filter Context ပြောင်းလဲတွက်ချက်သွားခြင်းကြောင့် RELATED Formula အသုံးပြုရန် မလိုအပ်ခြင်း ဖြစ်သည်။ )
-
Filter Argument တွင် Boolean Expression ရေးသားရာတွင် Calculated Field (Measure) အမည်များ အသုံးပြုရေးသား၍ မရပါ။
-
Filter Argument တွင် CALCULATE Formula ကို ထည့်သွင်း အသုံးပြု၍ မရပါ။
-
Filter Argument တစ်ခုတည်းတွင် မတူညီသည် Column နှစ်ခုအား ချိတ်ဆက်ရေးသားလိုလျင် FILTER Formula ကို အသုံးပြုရမည် ဖြစ်သည်။ ဥပမာအားဖြင့် အောက်ပါ Formulaတွင် Filter Argument တစ်ခုတည်း၌ Cost ထက် နှစ်ဆရောင်းသော Product များအပေါ်မူတည်တွက်ချက်ရန် ရေးသားထားခြင်း ဖြစ်ရာ ထိုကဲ့သို့ ရေးသား၍ မရပါ။
=CALCULATE( [Profit] ), Product[Unit Price] >= Product[Unit Cost] * 2 )
အထက်ပါအခြေအနေကို ဖြေရှင်းနိုင်ရန်အတွက် အောက်ပါအတိုင်း FILTER Formula ကို အသုံးပြု ရေးသားရမည် ဖြစ်ပါသည်။
=CALCULATE( [Profit], FILTER( ALL(Product), Product[Unit Price] >= Product[Unit Cost] * 2 ) )

