DAX nədir: Power BI funksiyaları və praktik nümunələr

DAX nədir: Power BI funksiyaları və praktik nümunələr
Power BI DAX nədir və harada istifadə olunur?
DAX, yəni Data Analysis Expressions, Power BI, Excel Power Pivot və Analysis Services tabulyar modellərində analitik hesablamalar yaratmaq üçün düstur dilidir. Satış məbləğini toplamaq, bölgənin ümumi nəticədə payını tapmaq və ötən ilin eyni dövrü ilə müqayisə aparmaq üçün istifadə olunur.
Eyni satış göstəricisi hesabatda məhsul, tarix və filial seçiminə uyğun dəyişməlidirsə, DAX measure qurursunuz. Hər əməliyyata ayrıca kateqoriya vermək lazımdırsa, calculated column yaradırsınız. Düzgün seçim hesablamanın hansı suala cavab verdiyindən başlayır.
DAX satış analitiki, maliyyə mütəxəssisi və hesabat hazırlayan əməkdaş üçün xüsusilə faydalıdır. Məsələn, satış analitiki sifarişlərin orta məbləğini, maliyyə mütəxəssisi isə dövrlər üzrə gəlir fərqini eyni data model üzərində hesablaya bilər.
Excel daxilində əlaqəli cədvəllərlə işləyirsinizsə, Power Pivot ilə məlumat modelləşdirmə DAX-ın tətbiq olunduğu mühitlərdən biridir. DAX yalnız ölçü yaratmır: hesablanan sütunlar, hesablanan cədvəllər və sətir səviyyəsində təhlükəsizlik qaydalarında da işlənir.
DAX sintaksisi necə qurulur və Excel düsturlarından nə ilə fərqlənir?
Sadə DAX ölçüsü ölçü adı, bərabərlik işarəsi və hesablama ifadəsindən qurulur: Ölçü adı = FUNKSİYA(Cədvəl[Sütun]). Burada funksiya hesablamanı, cədvəl və sütun istinadı isə istifadə edilən məlumatı müəyyənləşdirir.
Ümumi satış = SUM('Satış'[Məbləğ])
Bu ilk ölçü 'Satış' cədvəlinin [Məbləğ] sütununu cari filtr şəraitində toplayır. Cədvəl adını tək dırnaqla, sütun adını kvadrat mötərizə ilə göstəririk. Artıq yaradılmış ölçüyə isə [Ümumi satış] şəklində istinad edirik.
Excel-də SUM(A2:A100) kimi xana aralığı seçə bilərsiniz. DAX-da əsas istinad vahidi cədvəl və sütundur; əlaqələr də nəticəyə təsir göstərir. Excel-in əsas imkanları ilə tanışlıq başlanğıcı asanlaşdırır, lakin xana məntiqini DAX-a olduğu kimi köçürmək düzgün deyil.
Məsələn, measure daxilində yalnız 'Satış'[Məbləğ] yazmaq çoxsaylı sətirlər olduqda vahid nəticə verməyə bilər. Məqsəd cəmdirsə SUM, orta qiymətdirsə AVERAGE seçirsiniz. Funksiya adından əvvəl nəticənin hansı səviyyədə hesablanacağını müəyyənləşdirin.
Nümunələrdə arqumentlər vergüllə ayrılır; lokal DAX ayırıcıları aktivdirsə, mühitiniz nöqtəli vergül tələb edə bilər. Sintaksisi köçürərkən dırnaqları, mötərizələri və modeldəki adları Microsoft-un DAX sintaksisi qaydaları ilə yoxlaya bilərsiniz.
Measure və calculated column arasında fərq nədir?
Measure hesabatın filtr kontekstinə uyğun nəticə hesablayır, calculated column isə hər sətir üçün ayrıca dəyər yaradır. Dinamik satış göstəricisi üçün measure, məhsulu kateqoriyaya ayırmaq üçün hesablanan sütun seçin.
| Meyar | Measure | Calculated column |
|---|---|---|
| Hesablama səviyyəsi | Cari filtr kontekstində nəticə | Hər sətir üçün dəyər |
| Import modelində hesablanma | Sorğu zamanı ehtiyac olduqda | Məlumat yenilənərkən |
| Nəticənin saxlanması | Əvvəlcədən sətirlər üzrə saxlanmır | Dəyərlər modeldə saxlanır |
| Slicer seçiminə reaksiya | Nəticə yenidən hesablanır | Sütunun dəyərləri dəyişmir |
| Uyğun istifadə | Satış cəmi, pay, artım faizi | Qrup, etiket, sıralama atributu |
Məsələn, sifarişi məbləğinə görə 'Böyük' və 'Standart' qruplarına ayıran sütun slicer-də istifadə oluna bilər. Seçilmiş qrupun satış cəmini isə measure hesablayır. Beləliklə, sütun təsnifatı saxlayır, ölçü seçilmiş məlumatı ümumiləşdirir.
Hər göstəricini calculated column kimi yaratmaq modeldə əlavə dəyərlər saxlaya bilər. Xüsusən faiz və nisbətlərdə əvvəlcə biznes qaydasını yazın: bölgənin payı hər əməliyyatın sabit atributu deyil, seçilmiş dövr üzrə müqayisə nəticəsidir.
Məlumatı modelə gətirməzdən əvvəl sütunu bölmək, məlumat tipini dəyişmək və mənbələri birləşdirmək üçün Power Query istifadə olunur. Onun M dili məlumat hazırlayır; DAX isə modeldə analitik ifadələr qurur. Hesabat seçiminə reaksiya verməli hesablama üçün measure uyğun seçimdir.
Ən çox istifadə olunan DAX funksiyaları hansılardır?
DAX funksiyaları arasında başlanğıc üçün aqreqasiya, məntiq, filtr, iterator və zaman analitikası qrupları əsasdır. Funksiyanı adına görə deyil, toplamaq, təsnif etmək, filtri dəyişmək və ya dövr müqayisəsi aparmaq ehtiyacına görə seçin.
| Funksiya | Nə edir? | Nümunə ifadə |
|---|---|---|
| SUM | Sütundakı ədədləri toplayır | SUM('Satış'[Məbləğ]) |
| AVERAGE | Ədədi dəyərlərin ortasını hesablayır | AVERAGE('Satış'[Məbləğ]) |
| COUNTROWS | Cədvəlin sətirlərini sayır | COUNTROWS('Satış') |
| DISTINCTCOUNT | Unikal dəyərləri sayır | DISTINCTCOUNT('Satış'[SifarişID]) |
| IF, SWITCH | Şərtə uyğun nəticə seçir | IF([Ümumi satış] > 0, "Satış var", "Yoxla") |
| CALCULATE | Hesablamanın filtr kontekstini dəyişir | CALCULATE([Ümumi satış], 'Bölgə'[Ad] = "Bakı") |
| FILTER | Şərtə uyğun sətirlərdən cədvəl qaytarır | FILTER('Satış', 'Satış'[Məbləğ] > 0) |
| ALL | Filtr dəyişdiricisi kimi filtr məhdudiyyətini götürür | ALL('Bölgə') |
| SUMX | İfadəni sətirlər üzrə hesablayıb toplayır | SUMX('Satış', 'Satış'[Say] * 'Satış'[Qiymət]) |
| TOTALYTD | İlin əvvəlindən cari dövrədək nəticəni hesablayır | TOTALYTD([Ümumi satış], 'Tarix'[Tarix]) |
| SAMEPERIODLASTYEAR | Ötən ilin uyğun tarixlərini qaytarır | SAMEPERIODLASTYEAR('Tarix'[Tarix]) |
| DATEADD | Tarixləri göstərilən interval qədər sürüşdürür | DATEADD('Tarix'[Tarix], -1, MONTH) |
| LEFT, YEAR | Mətn hissəsini və tarixdən ili çıxarır | LEFT('Məhsul'[Kod], 3); YEAR('Tarix'[Tarix]) |
AVERAGE ilə orta çek həmişə eyni nəticə deyil. Bir sifariş bir neçə məhsul sətrindən ibarətdirsə, sütunun ortası sətirlərin orta məbləğini göstərir. Orta çek üçün ümumi satışı unikal sifariş sayına bölmək lazımdır.
SUM hazır məbləğ sütununu toplayır. Məbləğ ayrıca saxlanmırsa, SUMX hər sətirdə say ilə qiyməti vurub nəticələri cəmləyə bilər. IF iki nəticəli şərt üçün əlverişlidir; çoxsaylı təsnifat şərtlərini SWITCH ilə daha oxunaqlı qurmaq mümkündür.
Filter context və row context nədir?
Filter context hesablamaya daxil olan məlumatı məhdudlaşdırır, row context isə ifadənin hazırda hansı sətir üzərində hesablandığını göstərir. Tarix slicer-i filtr konteksti yaradır; SUMX daxilində sətir üzrə vurma əməliyyatı sətir kontekstindən istifadə edir.
Şərti hesabatda siz oktyabr ayını və Bakı bölgəsini seçirsiniz. [Ümumi satış] ölçüsü əlaqələr vasitəsilə həmin seçimlərə uyğun satışları toplayır. Eyni ölçünü bölgələr üzrə cədvələ əlavə etdikdə hər bölgə sətri öz filtr kontekstində hesablanır.
Row context nümunəsində SUMX satış cədvəlinin hər sətrində [Say] və [Qiymət] dəyərlərini götürür. Sadəcə sətir kontekstinin olması digər cədvəlləri avtomatik filtrləmək demək deyil. Row context və filter context eyni mexanizm kimi qəbul edilməməlidir.
Bu davranış üçün data model də düzgün qurulmalıdır. Star schema yanaşmasında 'Satış' fakt cədvəli, 'Tarix', 'Məhsul' və 'Bölgə' isə ölçü cədvəlləri ola bilər. Onların unikal açarları satış cədvəlindəki uyğun açarlarla əlaqələndirilir.
Bölgə seçəndə nəticə dəyişmirsə, düsturu uzatmazdan əvvəl əlaqənin aktivliyini və filtr istiqamətini yoxlayın. Eyni qayda tarixə də aiddir: slicer-də istifadə olunan tarix sahəsi satış cədvəlinə düzgün əlaqə ilə təsir etməlidir.
CALCULATE ilə satış, illik artım və bölgə payı necə hesablanır?
CALCULATE ifadəni dəyişdirilmiş filtr kontekstində hesablayır və buna görə dövr müqayisəsi, xüsusi seçim və ümumidə pay ölçülərinin əsasını təşkil edir. Aşağıdakı nümunələr əvvəl yaradılan [Ümumi satış] ölçüsündən istifadə edir.
Nümunə modeldə 'Satış' cədvəlində [Məbləğ], [SifarişID] və satış tarixi var. 'Tarix' və 'Bölgə' cədvəlləri satışlarla aktiv əlaqələndirilib. Sifariş identifikatorlarının boş olmadığı və hər sifarişi unikal tanıtdığı qəbul edilir.
Orta çek necə hesablanır?
Orta çek = DIVIDE([Ümumi satış], DISTINCTCOUNT('Satış'[SifarişID]))
Bu ölçü satış cəmini sifariş sayına bölür. Sifariş məhsul sətirlərində təkrarlansa da, DISTINCTCOUNT onu bir dəfə sayır. Məxrəc sıfır olduqda alternativ nəticə göstərilməyən DIVIDE boş nəticə qaytarır.
Ötən ilin eyni dövrünün satışı necə tapılır?
Ötən il satış = CALCULATE([Ümumi satış], SAMEPERIODLASTYEAR('Tarix'[Tarix]))
SAMEPERIODLASTYEAR seçilmiş tarixləri ötən ilin uyğun dövrünə sürüşdürür. CALCULATE isə satışı həmin tarixlərlə hesablayır. Müqayisədə cari ilin tamamlanmamış ayını ötən ilin tam ayı ilə qarışdırmamaq üçün seçilmiş dövrü ayrıca yoxlayın.
Ötən ilə görə artım faizi necə qurulur?
Ötən ilə görə artım % = VAR CariSatis = [Ümumi satış] VAR EvvelkiSatis = [Ötən il satış] RETURN DIVIDE(CariSatis - EvvelkiSatis, EvvelkiSatis)
VAR aralıq nəticələrə ad verir, RETURN yekun ifadəni qaytarır. Dəyişənlər düsturu oxumağı və yoxlamağı asanlaşdırır. Nəticəni faiz formatında göstərin; faiz formatından istifadə edərkən əlavə olaraq yüzə vurmağa ehtiyac yoxdur.
Bölgənin ümumi satışdakı payı necə tapılır?
Bölgə payı % = DIVIDE([Ümumi satış], CALCULATE([Ümumi satış], ALL('Bölgə')))
Surət cari bölgənin satışıdır. Məxrəcdə ALL yalnız 'Bölgə' cədvəlinin filtrlərini götürür, tarix və məhsul seçimləri qalır. Beləliklə, ölçü seçilmiş tarix və məhsul daxilində bütün bölgələrə nisbəti göstərir, yalnız seçilmiş bölgələrin cəminə nisbəti göstərmir.
CALCULATE mövcud sütun filtrini yeni filtrlə əvəz edə bilər. Məsələn, Bakı şərti yazılmış ifadəni başqa bölgənin sətrində göstərərkən nəticənin biznes məqsədinə uyğunluğunu yoxlayın; funksiyanın adını bilmək filtr davranışını yoxlamağı əvəz etmir.
DAX funksiyalarını öyrənmək üçün haradan başlamaq və hansı səhvlərdən qaçmaq lazımdır?
DAX funksiyalarını öyrənmək üçün əvvəl model əlaqələrini qurun, sonra sadə ölçüləri yaradın, filtr kontekstini yoxlayın və zaman müqayisəsinə keçin. Təcrübəni eyni satış modeli üzərində aparmaq funksiyalar arasındakı fərqi görməyə kömək edir.
- Biznes sualını yazın. 'Satış necədir?' əvəzinə 'Seçilmiş ayda hər bölgənin satış payı nədir?' sualını seçin.
- Baza ölçünü yoxlayın. Ümumi satışı mənbədəki yekunla tutuşdurun, sonra bölgə və məhsul filtrlərini ayrı tətbiq edin.
- Tarix cədvəlini hazırlayın. Buradakı klassik zaman analitikası nümunələri üçün tarix sütunu unikal, boşluqsuz və fasiləsiz olmalı, tam illəri əhatə etməlidir. Cədvəli tarix cədvəli kimi işarələyin.
- Sərhəd halları sınayın. Satış olmayan dövr, boş sifariş identifikatoru və ötən il məlumatı olmayan tarix üçün nəticəni yoxlayın.
Calculated column-u hər hesablamaya tətbiq etmək, tarix cədvəli olmadan dövr müqayisəsi qurmaq və BLANK nəticəni səbəbini araşdırmadan sıfıra çevirmək əsas səhvlərdəndir. Məlumatın olmaması ilə həqiqi sıfır satış müxtəlif biznes mənaları daşıyır.
Model qurulması və dashboard hazırlama mərhələlərinə də ehtiyacınız varsa, məlumat modelləşdirmə və vizuallaşdırma üzrə Power BI təlimi uyğun başlanğıcdır. DAX biliklərini dərinləşdirmək üçün INNAB-ın Power BI DAX təlimi standart və mürəkkəb funksiyalar, zaman analitikası və əlaqələrin qurulmasını əhatə edir.
Tez-tez verilən suallar
DAX-da düzgün nəticə üçün funksiya seçimi, model əlaqələri və hesablama konteksti birlikdə yoxlanmalıdır. Başlanğıcda yaranan suallar əsasən bu anlayışların fərqinə aiddir.
DAX öyrənmək üçün Excel bilmək vacibdirmi?
Excel təcrübəsi SUM və IF kimi funksiyaları tanımağa kömək edir. Lakin DAX üçün ayrıca cədvəl əlaqələrini, measure məntiqini və filtr kontekstini öyrənməlisiniz.
DAX ilə Power Query bir-birini əvəz edirmi?
Xeyr. Məsələn, mənbədəki tarix mətnini düzgün məlumat tipinə çevirmək Power Query işidir. Seçilmiş tarix aralığında satış artımını hesablamaq isə DAX measure ilə həll olunur.
Measure nəticəsi niyə slicer seçəndə dəyişmir?
Əvvəl slicer cədvəlinin satışlarla əlaqəsini yoxlayın. Sonra ölçüdə ALL kimi filtr məhdudiyyətini götürən ifadələrin olub-olmadığına baxın. Hər iki hal seçimin nəticəyə təsirini dəyişə bilər.
BLANK nəticəsini həmişə sıfır göstərmək lazımdırmı?
Xeyr. Ötən il satış yoxdursa, artım faizinin boş qalması müqayisə bazasının olmadığını bildirə bilər. Sıfır göstərmək isə istifadəçidə artımın olmadığı təəssüratını yarada bilər.
Orta çekdə COUNTROWS istifadə etmək olarmı?
Yalnız hər sətir ayrıca sifarişi təmsil edirsə. Sifariş bir neçə məhsul sətrindən ibarətdirsə, COUNTROWS məhsul sətirlərini sayacaq. Belə modeldə unikal sifariş identifikatorlarını sayın.
