Power Pivot #15 – Günlük ortalama satışların hesablanması – AVERAGEX (DAX)

Power Analytics

Satış sahəsində çalışanlar üçün kritik əhəmiyyət daşıyan suallar var: Ümumi günlük ortalama satış nə qədərdir? Həftəiçi və ya həftəsonu günlük ortalama satış nə qədərdir? Anbardakı gündəlik ortalama stok miqdarı nə qədərdir? Bu göstəricilər aylar və illər üzrə trendi necədir? 

Bütün bu sualları və çox daha artığını bu mövzuda əhatə edəcəyik. Bu günkü yazımızın digər yazılardan əsas fərqlərindən biri isə – bütün hesablama və vizuallaşdırmaları Power BI platformunda edəcəyimizdir. Beləliklə, Power BI-ın nəyə oxşadığı, üstünlükləri haqqında da müəyyən anlayışımız formalaşacaqdır.

Elə isə başlayaq…

Power Pivot-da olan modelimizin eynisini rahatlıqla Power BI platformuna daşımaq olar, gəlin eyni modelimizin Power BI Diagram view-suna baxaq, Power BI-da bu – Relationships adlanır.

Görürük ki, bütün model, müəyyən vizual fərqlər xaricində, Excel-dəki PowerPivot modelinin eynisidir.  Ana Cədvəlimizlə (SalesData) hər 3 cədvəl (CustomersProducts və CalendarTableone-to-many prinsipi ilə əlaqələndirilmişdir.

Günlük ortalama satışın hesablanması

Power BI-da measure yazmaq üçün Menudan Modeling >> New Measure seçməliyik.

Picture2.png

Günlük ortalama satış məbləğini hesablamaq üçün AVERAGEX  iterator funksiyasından istifadə etməliyik: 

Picture3.png

 2 parametrdən ibarətdir:

  • Table: Hər bir sətrinə bir-bir baxmalı olduğu cədvəlin adı
  • Expression: O sətirlərlə nə etməli olduğu

Teoriyadan praktikaya keçib, bizim data modelimizdə günlük ortalama satışın formulunu yazıb, daha sonra müzakirəyə davam edək.

Picture5.png

Yeni measure-ımız adı – Average Daily Sales-dir. İlk parametri – SalesData cədvəlidir, çünki bizə lazım olan bütün məlumat o cədvəldədir. O səbəblə, AVERAGEX funksiyasının ilk parametri olaraq bu cədvəlin adını daxil etməliyik.

Quick tip: DAX funksiyalarından hansında “X” faktorunu görürsünüzsə, bilin ki, həmin funksiyanın ilk parametri mütləq hansısa cədvəl olacaqdır.

 

Nəyin ortalamasını almaq istəyirik? – Gündəlik satış məbləğlərinin. O səbəblə, funksiyamızın 2-ci və son parametri də Total Sales measure-ıdır (PowerPivot modelimizdə bu measure Total Revenue adlanırdı, amma bundan sonra Total Sales olaraq davam edəcəyik). Funksiya, ən sadə dillə desək bunları edir: SalesData cədvəlindəki hər bir sətirdəki Total Sales məbləğlərini götürüb, onların ortalamasını alır. Bu formulu Power BI-da Matrix Report olaraq vizuallaşdıraq:

Picture6.png

Filter konteksti araya girərək, yazdığımızı ümumi measure-ı ay və illər üzrə müvafiq dəyərlər gələcək şəkildə formalaşdırdı, eynilə Excel-dəki pivot cədvəl kimi. Burada özümüzə çox vacib bir sual verməklə, DAX fəlsəfəsini daha yaxşı anlamaq imkanı əldə edirik: 

Məsələn, Aprel-2018-ci ildəki dəyər (2,725.93) arxa planda hansı məntiqlə formalaşdı?

Cavab: Yazdığımız measure-ı pivot cədvələ atmaqla, avtomatik filter kontekstini yaratmış olduq (ay – Aprel və il – 2018), yəni DAX, bu measure-ın “özbaşına” olmadığını, əksinə, ətrafındakı şəraitə uyğunlaşmalı olduğunu bildirdi.

Daha sonra AVERAGEX funksiyasının ilk komponenti olaraq müəyyən etdiyimiz cədvəldəki ancaq 2018-ci ilə və ancaq Aprel ayına aid olan sətirlər aktivləşdi. Digər bütün sətirlər iqnor edildi. Funksiyanın 2-ci komponenti olan Total Sales measure-ı ilə məbləğlər hesablanaraq, ortalaması alındı. Bu məntiqi anlamaq – DAX-ı anlamaqda fundamentaldır. Yuxarıdakı cavabı anlamadınızsa, bir daha oxuyun. Çünki, DAX əksər hallarda, filterlənən cədvəllər və onların əsasında formalaşdırılan measure-lardan ibarətdir.


Həftəsonu ortalama satışın hesablanması

Ümumi ortalama gündəlik satışı hesabladıqdan sonra, işin daha da maraqlı tərəfi – satışların daha çox həftə içi yoxsa həftə sonu edildiyi sualıdır. Bunu hesablamada da DAX böyük imkanlar yaradır. Formulumuz daha öncəkilərlə müqayisədə bir az uzundur, lakin, məntiqi sadədir:

Özümüzü qorxutmadan öncə, anındaca müəyyən “təmizliklər” edək. Bu formul, ən birinci yazdığımız formulun tamamilə eynisidr, sadəcə müəyyən kriteriyalar əlavə etmişik. Fikir versəniz görərsiniz ki, funksiyamız elə həmin AVERAGEX funksiyasıdır, içində hər zamankı kimi 2 parametr var, Cədvəl və Total Sales. Bizim işimizi qəlizləşdirən – Cədvəl parametridir, yəni bu hissə:

 Bunun da səbəbi odur ki, biz bütün satışları yox, ancaq həftə sonuna aid olan satışları tapıb, daha sonra onların ortalamasını almalıyıq. Bunun üçün də, FILTER funksiyasının yardımı ilə, bizə lazım olmayan bütün sətirləri de-aktiv edərək, sadəcə həftə sonuna aid olanları saxlayırıq. Gəlin, FILTER funksiyamızı analiz edək, məntiqinin çox bəsit olduğunu görəcəksiniz.

Picture9.png

 FILTER funksiyası da 2 parametrdən ibarətdir:

  • Cədvəlin adı – SalesData
  • Və bu cədvəli filterləyəcək kriteriyalar. Bizim misalımızda, bu, seçilən tarixin şənbə (WEEKDAY = 6) və ya bazar (WEEKDAY = 7) olmasıdır. OR funksiyasının məntiqi Excel-dəki ilə eynidir.
  • WEEKDAY funksiyasının içindəki 2 ədədi – həftənin günlərinin sıralamasını müəyyən edən kriteriyadır. Əgər 1 yazmış olsaydıq, o zaman Bazar günü həftənin ilk günü kimi nəzərə alınacaqdı. O səbəblə, 2 yazırıq.

Yəni, FILTER ilə deyirik ki, SalesData cədvəlindəki hər bir sətirdəki tarixə baxaraq, şənbə və ya bazar günü olub-olmadığını müəyyən et. Bu qədər bəsit. Bu kriteriyaya uyğun gələn bütün sətirlər müəyyən edildikdən sonra, həmin tarixlərdəki Total Sales məbləğləri hesablanaraq, AVERAGEX ilə ortalaması alınır. Formulların uzunluğu – onların çətin və qəliz olduğu illüziyasını yaratmasın. Gəlin, yazdığımız yeni measure-ı Matrix Reportuna əlavə edək. 

Picture10.png

 Bu measure da, avtomatik olaraq filter kontekstinin təsiri altına düşərək, yazılan measure-ı aylar və illər üzrə qruplaşdırdı.

Həftəiçi ortalama satışın hesablanması

Eyni məntiqlə, gəlin bu dəfə də həftəiçi günlük ortalama satışı hesablayaq. Yenə, Total Sales measure-ı ilə gəlirləri hesablayacaq, FILTER funksiyası ilə ancaq bizə lazım olan günləri filterləyəcək, AVERAGEX funksiyası ilə də satışların ortalamaları hesablayacağıq.

Picture11.png

Bizi yenə qorxudan FILTER funksiyasının tərkibidir, amma daha yaxından baxsaq, görərik ki, həftəsonu hesablaması ilə demək olar ki eynidir, sadəcə müəyyən məntiqi dəyişikliklər edilib. 

Picture12.png

SalesData cədvəlindəki bütün sətirlərdəki tarixlərə baxmasını tapşırır, şənbə və bazar günlərinə bərabər olmayan bütün sətirləri aktivləşdirib, digərlərini de-aktiv etməsini istəyirik. Aktiv olan bütün sətirlər arxa planda yeni virtual cədvəl yaratmış olur. Bu cədvəldəki satışların ortalaması ilə formulumuzun işini yekunlaşdırırıq. Matrix Reportuna bunu da əlavə edək:

Picture13.png

Hətta, həftəiçi və həftəsonu olaraq daha yaxşı analiz edə bilmək üçün, bunu başqa formada vizuallaşdıraq:

DAX o qədər qüvvətli və fantastikdir ki, ortalama günlük satış məbləğini keçən ay və keçən ilin eyni dövrü ilə də rahatlıqla müqayisə edə bilərik. Bunun üçün, 2 yeni measure yazmalıyıq. 

Birincisi –AverageDailySales Last Month:

Picture16.png

Daha ətraflı – Power Pivot #12 – Keçən ayın satışlarının hesablanması – PREVIOUSMONTH (DAX)

İkincisi – AveDailySales Last Year:

Picture17.png

Daha ətraflı – Power Pivot #11 – İndiki dövr ilə keçən il eyni dövr arasındakı satışların müqayisəsi – SAMEPERIODLASTYEAR (DAX)

Hər iki yeni measure-ımızı Power BI-da vizuallaşdıraq:

DAX o qədər qüdrətlidir ki, yuxarıdakı kimi onlarla fərqli analitik formul yazmaq imkanımız var, yetər ki, düzgün məntiqi alqoritm ilə düzgün filterləmə apara bilək.

Növbəti mövzuda, FILTER funksiyasını bir az daha ətraflı ələ alıb, filterləmə əməliyyatında əbəs yerə DAX-ın ən vacib funksiyası olmadığını müşahidə edəcəyik.