Kontekst keçidi (Context transition)

CALCULATE ilə bağlı daha bir vacib mövzu var. Bu çox güman DAX kodunuzda yazacağınız bir çox xətanın əsas səbəbi olacaqdır. Bundan qorxmayın. Bu olduqca güclü bir xüsusiyyətdir. Amma əvvəlində çox güman ki, bəzi kodların belə olmayan bir dəyəri hesabladığını düşünməyə vadar edəcəkdir.

Bəli, məhz bu Kontekst keçidi adlanır. Kontekst keçidi nədir? Bunun üçün faylı Power BI üzərində açıb, müəyyən hesablamalar apararaq mövzunu mənimsəyəcəyik. Power BI-ı ilk öncə açırıq. Burada isə Product cədvəlinə klik edirik:

Bu cədvəl üzərində yeni bir hesablanmış sütun yaradaq. Göründüyü kimi Product cədvəlində hesablanmış sütun yaradırıq.Burada Product cədvəlində hesablanmış sütun yaratdığımıza görə,Product cədvəli üçün avtomatik bir sətir konteksti vardır.

Hesablanmış sütuna klik edirik .Əlimizdə olan Unit Price sütununun cəmini (SUM) tapırıq:

Enter klik edək.Hazırda filter kontekstində görünən bütün sətrlər üçün Product cədvəlindəki Unit Price sütunu toplanacaqdır.Hazırda filter konteksti heç birşeyi filterləmir.

Göründüyü kimi yeni yaranan sütun Unit Price olmayan bir dəyəri özündə ehtiva edir.Bu, bütün Unit Price-nin cəmidir,çünki SUM cari filter kontekstində görünən bütün Unit Price-ni bir araya gətirmiş olur.

Digər tərəfdən isə hər sətir eyni dəyərə malikdir.Toplam olduğu üçün burada filter yoxdur.Bu sütun üzərində bir qədər iş görək.Sütunun kodunu dəyişməyə çalışaq və sadəcə CALCULATE əlavə edək:

Enter klik etdikdən sonra qarşımıza aşağıdakı nəticə çıxacaqdır:

Hal-hazırda Unit Price-nin cəminin, mövcud filter kontekstindəki Unit Price olduğunu bilirik.Lakin indi Kontekst keçidini də işə qatmalıyıq.CALCULATE sətir kontekstini yox edir.Sonra onu yalnız o anda təkrarlanan sətri özündə ehtiva edən filter kontekstinə çevirir. Nəticədə Unit Price cəmi yalnız bu sətir olan bir filter kontekstində yerinə yetiriləcəkdir.

Məhz bu Kontekst keçidinə görədir.Göründüyü kimi Kontekst keçidi sadə bir SUM əməliyyatının yerinə yetirilməsini dəyişdirə bildi.Bu hesablamaları Product cədvəli ilə yanaşı Product və Sales arasındakı birə-çox əlaqəsinin çox tərəfində duran Sales cədvəli üzərində həyata keçirək:

Formulun açıqlaması – “cari filter kontekstində görünən bütün sətrlər üçün Line Margin sütunun cəmi” kimidir. Hazırda Sales cədvəlində filter konteksti nədir?

Yoxdur! Heç kim Sales cədvəlində filter tətbiq etmir.Sətir konteksti əlaqələr vasitəsilə yayılmır.Beləliklə Enter klik etdikdə sondakı nəticənin bütün satışların toplam cəmi olduğunu görəcəyik:

İndi isə koda CALCULATE əlavə edək.Nə baş verəcək?Deməli sətir konteksti ilə başlayırıq, CALCULATE deyirik, CALCULATE kontekst keçidini gerçəkləşdirəcək.O yalnız mümkün sətri ehtiva edən yeni bir sətir konteksti yaradacaqdır.

Lakin  indi o filter kontekstidir və artıq sətir konteksti deyildir.Əlaqələr yolu ilə yayılan bir filter konteksti olaraq və Productdan başlayaraq Sales-ə çatacaqdır.Nəticədə isə satışlara çata biləcək tək bir məhsulu ehtiva edən bir filter kontekstə sahib olacağıq.Nəticə artıq satışların ümumi cəmi olmayacaqdır:

Lakin nəticəyə baxsaq,bu yalnız mövcud məhsulun satışı olacaqdır.Beləliklə kodun içindəki CALCULATE funksiyasının varlığının kodun məna və davranışını tamamilə dəyişdirdiyini gördük.Sonra isə original kod üzərində CALCULATE funksiyasını silərək yerdə qalan hissəni kopyalayaq:

Yeni ölçü yaradaq və adını Total Margin qoyaraq kopyaladığımız kodu əlavə edək:

Enter klik etdikdən sonra əvvəlcə yaratdığımız hesablanmış sütuna klik edirik:

Məhz burada kodu yeni yaratdığımız ölçü ilə dəyişdirək və nəticənin nə olacağının təxmin edək:

Göründüyü kimi burada heç bir yerdə CALCULATE funksiyası yoxdur.Məhz CALCULATE olmadığından,əgər Enter klik edərsək bu ölçünün bütün sətrlər üçün Line Marginin toplam cəmini hesablamasını gözləyirik.Enterə klik edək və nəticəyə baxaq:

Amma nəticə bizim gözlədiyimizin tam əksi çıxdı. Nəticə bizə yalnız CALCULATE-in orada bir Kontekst keçidi etdiyini və yalnız cari məhsulun satışını geri qaytardığını göstərir.Məsələ tam olaraq belədir.

QAYDA – DAX ifadəsinin içindən bir ölçü çağırdığınızda,bu ölçü avtomatik olaraq CALCULATE ilə əhatələnir.Şəklə diqqət edək:

Buradan aydın olur ki,hansısa bir DAX ifadəsi yazdığımızda və içindən bir ölçü çağırdığımızda bu ölçü avtomatik olaraq CALCULATE ilə çevrələnir.Bu olduqca mühümdür,çünki onun varlığının yazdığınız kodu və hesabladığınız nəticəni necə dəyişdiyinin şahidi olduq.

Default image
Emin Məhərrəmli
Articles: 46

Leave a Reply