Power Pivot #14 – SUMIF funksiyasının DAX-dakı ekvivalenti – RELATEDTABLE

Power Analytics

Excel-də hər hansı bir kateqoriyaya aid dəyərləri cəmləşdirib qruplaşdırmaq istədikdə, SUMIF funksiyasına müraciət edirik. Eyni funksiyanın DAX-dakı ekvivalentlərindən biri – RELATEDTABLE funksiyasıdır.

Picture3.png

Bu funksiya bir-biri ilə əlaqəli olan cədvəllər arasında əməliyyat apara bilir. RELATED funksiyası bu əlaqələrin 1 – * tərəfində idisə, RELATEDTABLE * – 1 tərəfindədir. Aşağıdakı diaqramda bunu daha rahat anlamaq olar:

Picture4.png

Gördüyümüz kimi, unikal dəyərlər olan sütundan – təkrarlanan dəyərlər olan sütuna məlumat “transfer etmək” istəsək (yuxarıdakı 1 nömrəli istiqamət), funksiyamız RELATED olacaqdır, one-to-many terminin mənası da budur.

Lakin, bunun tam əksinə, təkrarlanan dəyərlər olan sütundan – unikal dəyərlər olan sütuna məlumat gətirmək istəsək (aşağıdakı 2 nömrəli istiqamət), bu dəfə RELATEDTABLE funksiyasından istifadə etməliyik (many-to-one).

Picture5.png

Gəlin, misal ilə davam edək, daha yaxşı anlaşılacaqdır.

Bizdəki mövcud cədvəllərdən biri olan Customers cədvəli üzərindən, hər şirkətin bütün satışlarını qruplaşdıraq.

Picture1.png

Bunun üçün PowerPivot platformuna keçərək, Total Sales adlı yeni Calculated Column yaradırıq.

Picture6.png

Formulumuzun sintaksını daha yaxından analiz edək:

Picture2.png

Calculated Column – Customers cədvəlində yazıldığı üçün və Customers cədvəlinin [Customer ID] sütunu ilə SalesData cədvəlinin eyniadlı sütunu fiziki olaraq bir-birinə bağlı olduğu üçün, bu 2 cədvəl arasında istənilən məlumat alış-verişini həyata keçirə bilərik.

RELATEDTABLE ( SalesData) sorğusu ilə, SalesData cədvəlində hər bir müştəriyə aid sətirləri ayrıca bir virtual cədvəl halında qruplaşdırırıq. Qruplaşdırma, şirkət kodları əsasında baş verir. Bir cədvəldən digər cədvələ keçməklə, eynilə SUMIF-də olduğu kimi, sadəcə olaraq, daha kompleks və struktural şəkildə. Biz bu virtual cədvəlləri görməsək də, onlar arxa planda hazır gözləyir. Bu formul – eBay, Microsoft, Xerox və s. kimi şirkətlərin qarşısındakı sətirlərdə yazıldığı üçün, hər bir şirkətə aid SalesData cədvəlindəki bütün sətirlər arxa planda hər biri ayrı bir cədvəl olaraq gözəgörünməyən şəkildə gözləyir (sətir və filter kontekstləri eyni anda).

Ümumiyyətlə, DAX-la işləyərkən, tək xanaya  böyük cədvəllər sığdırmaq mümkündür (DAX-da xana konsepsiyası olmasa da, anlaşılması üçün bu misalı verirəm), bunu filter funksiyalarını öyrənəcəyimiz zaman görəcəyik.

Arxa planda müvafiq cədvəllərimiz hazır olduğu üçün, bu dəfə, SUMX funksiyası ilə SalesData cədvəlindəki 2 sütunu – [Units sold] və [Unit sales price] bir-birinə vurub, hər birini cəmləyirik (SUMX haqqında daha ətraflıPower Pivot #7 – SUMX funksiyası (DAX)).

Və ya, hər bir şirkətə neçə dəfə satış etdiyimizi də eyni formada hesablaya bilərik. Bunun üçün, yeni bir funksiyaya ehtiyacımız olacaq – COUNTROWS.

Picture7.png

Parametr olaraq, ancaq cədvəl adını tələb edir. Bu cədvəl – ya müstəqil hər hansı bir cədvəl də ola bilər, filter funksiyaları ilə formalaşdırılmış virtual cədvəl də.

COUNTROWS ilə, istənilən cədvəldəki, istənilən filter kontekstinə uyğun olaraq, həmin cədvəldəki sətirlərin sayını hesablayırıq. COUNTCOUNTA funksiyalarından fərqli olaraq, COUNTROWS dəyərləri yox, bütövlükdə sətirlərin sayını hesablayır. Misalımızda, hər şirkətə neçə dəfə fərqli əməliyyat apardığımızı hesablayaq:

Picture8.png

Number of Sales adlı yaratdığımız yeni Calculated Column-a yazacağımız formulumuz belə olmalıdır:

Picture9.png

DAX formullarını daha yaxşı anlamaq üçün ən içəridəki funksiyadan (innermost function) başlamalı olduğumuz üçün, formulumuzu 2 addımda belə oxumalıyıq:

  1. Hazırki row context daxilində (eBay, Microsoft, IBM və s.), həmin şirkətlərə aid bütün sətirləri SalesData cədvəlində tap,
  2. Hər şirkətə aid tapdığın bütün sətirləri ayrıca virtual cədvəl halına gətir,
  3. Hazırladığın hər bir cədvəldəki sətirləri say.

Beləliklə, cədvəllərarası əlaqələrin hər iki istiqamətdə işləyiş mexanizmini öyrəndiyimizə görə, praktik məsələlərlə gündəlik işlərdə DAX-dan necə faydalana biləcəyimiz mövzulara keçək. Növbəti dərsdə, filter kontekstindən asılı olaraq, günlük ortalama satış məbləğini hesablayacaq, bunu həftəiçi və həftəsonu komponentlərinə böləcəyik.