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.
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:
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).
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.
Bunun üçün PowerPivot platformuna keçərək, Total Sales adlı yeni Calculated Column yaradırıq.
Formulumuzun sintaksını daha yaxından analiz edək:
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.
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. COUNT və COUNTA 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:
Number of Sales adlı yaratdığımız yeni Calculated Column-a yazacağımız formulumuz belə olmalıdır:
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:
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.