Pengantar DAX
Berdasarkan kursus video DAX yang memperkenalkan SQLBI.
Skema Laporkan

Laporan

Teori
Bahasa dax
DAX adalah bahasa fungsional, eksekusi mengalir dengan panggilan fungsi.
Lai Pemformatan kode penting dalam DAX, karena membuat kode debugging mudah. Untuk memformat kode DAX secara otomatis, seseorang dapat menggunakan DaxFormatter.
Kolom yang dihitung
- Kolom dihitung menggunakan DAX.
- Selalu dihitung untuk baris saat ini.
Langkah -langkah
- Ditulis menggunakan DAX
- Jangan bekerja baris demi baris
- Sebaliknya, gunakan tabel dan agregator
- Tidak memiliki konsep «baris saat ini»
Konvensi penamaan
- Langkah -langkah bukan milik tabel => Hindari nama tabel dalam tindakan referensi. Dengan cara ini lebih mudah untuk pindah ke tabel lain dan mengidentifikasi sebagai ukuran.
- Jadi:
- Kolom yang Dihitung -> Tabel [Kolom]
- Ukuran -> [Ukur]
Ukuran vs kolom yang dihitung
- Gunakan kolom saat:
- Perlu mengiris atau memfilter nilainya
- Gunakan ukuran saat:
- Menghitung persentase atau rasio
- Membutuhkan agregasi yang kompleks
- Ruang dan Penggunaan CPU:
- Kolom mengkonsumsi memori
- Langkah -langkah mengkonsumsi CPU
Fungsi Agregasi
- Bekerja hanya pada kolom numerik.
- Agregat hanya satu kolom.
Fungsi agregasi «x»
- Iterator: Berguna untuk mengumpulkan formula
- Iterasi di atas tabel dan evaluasi ekspresi untuk setiap baris
- Selalu menerima dua parameter:
- Meja untuk mengulang
- Formula untuk mengevaluasi setiap baris
- Contoh:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
Menggunakan variabel
- Sangat berguna untuk menghindari pengulangan subkapsi dalam kode Anda.
- Contoh:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
Fungsi tanggal
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
Fungsi tabel
- Fungsi dasar yang bekerja pada meja penuh dan mengembalikan tabel sebagai hasilnya
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- Hasilnya sering digunakan dalam fungsi lain
- Mereka dapat digabungkan bersama untuk membentuk ekspresi yang kompleks
MENYARING
- Menambahkan kondisi baru dengan membatasi jumlah baris tabel
- Mengembalikan tabel yang dapat diulang dengan fungsi «x»
SEMUA
- Mengembalikan semua baris tabel sambil mengabaikan konteks filter
- Mengembalikan tabel yang dapat diulang dengan fungsi «x»
- Dapat juga digunakan dengan satu kolom
ALL ( Customers[CustomerName] ) hasilnya menjadi tabel dengan satu kolom
BERBEDA
- Mengembalikan nilai -nilai yang berbeda dari kolom, hanya yang terlihat dalam konteks saat ini
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
TERKAIT TERKAIT
- Mengembalikan tabel dengan semua baris yang terkait dengan yang saat ini.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
Konteks evaluasi
1. Konteks filter
- Ditentukan oleh:
- Pemilihan baris
- Pemilihan kolom
- Laporan filter
- Pilihan Slicers
- Baris di luar konteks filter tidak dipertimbangkan untuk perhitungan
- Ditentukan secara otomatis oleh pivottable, dapat dibuat dengan fungsi tertentu juga
2. Konteks baris
- Ditentukan oleh:
- Definisi kolom yang dihitung
- Ditentukan secara otomatis untuk setiap baris
- Fungsi Iterasi Baris
- Sumx, rata -rata ...
- Semua «x» fungsi dan iterator
- Ditentukan oleh rumus pengguna
- Diperlukan untuk mengevaluasi nilai -nilai kolom, ini adalah konsep "baris saat ini"
Lai Konteks filter menyaring tabel. Konteks baris mengulangi baris!
MENGHITUNG
- Menggantikan sebagian konteks filter
- Kondisi
- Bisa menggantikan seluruh tabel
- Dapat mengganti satu kolom
- Hitung pekerjaan pada konteks filter
- Filter dievaluasi dalam konteks filter luar, kemudian digabungkan bersama -sama dan dan akhirnya digunakan untuk membangun konteks filter baru di mana DAX mengevaluasi ekspresi.
- Synthax:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. Filter dan jumlah berada di tabel yang sama. Anda dapat memperoleh hasil yang sama menggunakan filter.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. Filter Clear hanya pada satu kolom. Semua digunakan dengan tabel kolom tunggal.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
Filter dan hubungan
-Relationships mempengaruhi konteks filter
TERKAIT
RELATED ( table[column] )
- Membuka konteks baris baru di tabel target
- Hubungan berikut
- Memungkinkan banyak sisi ke satu sisi penyaringan
TERKAIT TERKAIT
RELATEDTABLE ( table )
- Menyaring tabel parameter
- Mengembalikan hanya baris yang terkait dengan yang saat ini
- Itu adalah teman terkait
Transisi Konteks
- Hitung melakukan tugas lain:
- Jika dieksekusi di dalam konteks baris
- Itu mengambil konteks baris
- Mengubahnya menjadi konteks filter yang setara
- Menerapkannya pada model data sebelum menghitung ekspresinya
- Contoh:
SUM() vs CALCULATE(SUM())
Kecerdasan Waktu
- Kecerdasan waktu membutuhkan tabel tanggal.
- Properti Tabel Tanggal:
- Semua tanggal harus ada
- Dari 1 ° Januari, hingga 31 ° Desember
- Tidak ada lubang
- Kalau tidak, kecerdasan waktu tidak akan berhasil
- Waktu intelijen mencakup:
- Tahun hingga saat ini
- Kuartal hingga saat ini
- Berjalan total
- Periode yang sama tahun sebelumnya
- Perhitungan hari kerja
- Tahun fiskal
- dll.
- Agregasi:
- YTD: Tahun Sampai Saat Ini
- QTD: kuartal hingga saat ini
- MTD: Bulan Sampai Saat Ini
KALENDER
- Mengembalikan tabel dengan satu kolom bernama "Date", berisi set tanggal yang berdekatan dalam kisaran yang diberikan, inklusif.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Calendarauto
- Secara otomatis membuat tabel kalender berdasarkan konten database. Secara opsional Anda dapat menentukan bulan lalu (berguna untuk tahun fiskal)
- Calendarauto menggunakan semua tanggal dalam model, tidak termasuk kolom dan tabel yang dihitung
Tahun hingga saat ini
DATESYTD dan TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
Periode yang sama tahun lalu
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
Berjalan total
- Menjalankan total membutuhkan filter eksplisit.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)