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 (Customers, Products və CalendarTable) one-to-many prinsipi ilə əlaqələndirilmişdir.
Power BI-da measure yazmaq üçün Menudan Modeling >> New Measure seçməliyik.
Günlük ortalama satış məbləğini hesablamaq üçün AVERAGEX iterator funksiyasından istifadə etməliyik:
2 parametrdən ibarətdir:
Teoriyadan praktikaya keçib, bizim data modelimizdə günlük ortalama satışın formulunu yazıb, daha sonra müzakirəyə davam edək.
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:
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.
Ü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.
FILTER funksiyası da 2 parametrdən ibarətdir:
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.
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ı.
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.
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.
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:
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:
Daha ətraflı – Power Pivot #12 – Keçən ayın satışlarının hesablanması – PREVIOUSMONTH (DAX)
İkincisi – AveDailySales Last Year:
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.