Mendesain perhitungan yang dapat diskalakan

Selesai

Model Anda terstruktur. Sekarang desain perhitungan yang membuatnya tetap berkinerja dan dapat dipertahankan seiring pertumbuhan data dan tim Anda. Pada skala kecil, model dengan ukuran duplikat dan penamaan yang tidak konsisten masih berfungsi, bahkan jika tidak ideal. Dalam skala besar, itu rusak. Model dengan ratusan langkah memerlukan keputusan desain struktural yang mencegah logika duplikat, mengurangi waktu kueri pada himpunan data besar, dan memungkinkan anggota tim baru untuk memahami dan memperluas model tanpa memperkenalkan kesalahan.

Unit ini mencakup tiga pola: grup penghitungan untuk mengurangi penyebaran ukuran, disiplin pembacaan DAX untuk meningkatkan pemeliharaan tim, dan agregasi untuk meningkatkan performa kueri pada tabel fakta besar.

Kelompok Perhitungan

Grup perhitungan adalah objek model yang menerapkan pola perhitungan yang sama di beberapa langkah. Alih-alih membuat langkah-langkah terpisah untuk setiap variasi, Anda menentukan pola sekali dan menerapkannya secara dinamis.

Penyelesaian masalah oleh kelompok penghitungan

Pertimbangkan organisasi dengan 50 langkah dasar (seperti Total Penjualan, Total Biaya, Laba, dan Unit Terjual). Setiap ukuran memerlukan perhitungan Tahun ke Tanggal, Triwulan ke Tanggal, dan Bulan ke Tanggal. Tanpa grup perhitungan, yaitu 50 × 3 = 150 tindakan tambahan. Tambahkan perbandingan tahun sebelumnya dan Anda memiliki lebih dari 250 ukurans untuk dipantau.

Dengan grup perhitungan, Anda membuat satu grup dengan item perhitungan untuk setiap pola kecerdasan waktu. Item tersebut berlaku untuk setiap ukuran dalam model secara otomatis.

Cara kerja grup perhitungan

Grup perhitungan berisi item perhitungan, masing-masing menentukan ekspresi DAX yang memodifikasi ukuran saat ini menggunakan SELECTEDMEASURE(). Berikut adalah grup perhitungan inteligensi waktu:

// Year-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Date'[Date])
)
// Quarter-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESQTD('Date'[Date])
)
// Month-to-Date
CALCULATE(
    SELECTEDMEASURE(),
    DATESMTD('Date'[Date])
)

Saat pengguna menambahkan grup perhitungan ke visual, mereka dapat beralih antara YTD, QTD, dan MTD untuk ukuran apa pun (seperti Total Penjualan, Laba, atau Unit Terjual) tanpa langkah-langkah terpisah untuk setiap kombinasi.

Format string dinamis

String format dinamis mengubah format tampilan berdasarkan konteks item perhitungan. Misalnya, perhitungan persentase harus ditampilkan sebagai persentase, sementara perhitungan mata uang harus ditampilkan sebagai mata uang, bahkan ketika diterapkan ke ukuran dasar yang sama.

// In the format string expression for a YoY % calculation item:
"0.0%"

String format dinamis mengurangi kebutuhan akan pengukuran berformat terpisah dan menjaga pemformatan tetap konsisten di seluruh model.

Tip

Pelajari selengkapnya tentang cara buat grup perhitungan di Power BI.

Kapan menggunakan grup perhitungan

Gunakan grup perhitungan saat Anda memiliki tiga langkah atau lebih yang memerlukan pola perhitungan yang sama diterapkan. Kasus penggunaan umum termasuk inteligensi waktu (YTD, QTD, MTD), konversi mata uang, dan perhitungan varians (aktual vs. anggaran).

Prinsip Keterbacaan DAX

Dalam skala besar dengan tim yang mempertahankan 200+ ukuran, keterbacaan adalah keputusan desain, bukan preferensi pribadi. DAX yang konsisten dan dapat dibaca mengurangi kesalahan pemeliharaan dan memudahkan anggota tim baru untuk memahami model.

Variabel

Variabel menyimpan hasil menengah, meningkatkan keterbacaan, dan mencegah mesin mengevaluasi ekspresi yang sama beberapa kali:

Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR ProfitAmount = TotalRevenue - TotalCost
RETURN
    DIVIDE(ProfitAmount, TotalRevenue)

Tanpa variabel, ekspresi yang sama SUM(Sales[Revenue]) mungkin muncul tiga kali dalam ukuran yang kompleks. Variabel mengevaluasi ekspresi sekali dan menggunakan kembali hasilnya.

Tip

Pelajari selengkapnya tentang menggunakan variabel untuk meningkatkan rumus DAX.

Konvensi penamaan

Penamaan yang konsisten sangat penting ketika model Anda memiliki ratusan langkah yang dikelola oleh beberapa orang. Tetapkan konvensi untuk:

  • Nama pengukuran: Gunakan nama yang jelas dan deskriptif seperti "Total Penjualan" atau "Pertumbuhan Pendapatan YoY." Hindari singkatan yang hanya dipahami oleh penulis asli.
  • Nama variabel: Gunakan nama deskriptif yang menjelaskan nilai perantara (seperti TotalRevenue bukan x atau temp).
  • Item grup perhitungan: Beri nama item menurut apa yang mereka lakukan, bukan cara kerjanya (seperti "Tahun ke Tanggal" daripada "DATESYTD Wrapper").

Penamaan deskriptif juga penting untuk konsumsi AI. Saat Copilot atau agen data mengkueri model Anda, ia menggunakan nama dan deskripsi pengukuran untuk menentukan perhitungan mana yang akan disertakan. Ukuran bernama "YoY Revenue Growth" menghasilkan hasil AI yang lebih baik daripada "Calc7_v2."

Tip

Copilot dalam Power BI dapat membantu menulis dan menjelaskan rumus DAX. Saat Anda mengerjakan langkah-langkah kompleks, gunakan Copilot untuk menyarankan peningkatan atau menjelaskan logika yang ada.

Fungsi iterator vs. agregasi

Fungsi iterator (SUMX, AVERAGEX, MAXX) mengevaluasi ekspresi baris demi baris atas tabel. Fungsi agregasi (SUM, AVERAGE, MAX) beroperasi pada satu kolom. Pada volume data besar, pilihannya penting:

  • Gunakan fungsi agregasi saat Anda meringkas satu kolom. Mereka lebih cepat karena mesin dapat menggunakan struktur data bawaan.
  • Gunakan iterator saat perhitungan memerlukan ekspresi tingkat baris (seperti Quantity × UnitPrice per baris).

Note

Iterator memproses setiap baris, yang dapat memengaruhi performa pada tabel fakta besar.

Fungsi informasi untuk pola defensif

Fungsi informasi seperti ISBLANK, HASONEVALUE, dan ISINSCOPE membuat pola defensif untuk langkah-langkah yang digunakan oleh beberapa laporan dengan konteks filter yang berbeda:

Sales per Customer =
IF(
    HASONEVALUE(Customer[CustomerID]),
    DIVIDE(SUM(Sales[Amount]), 1),
    DIVIDE(SUM(Sales[Amount]), DISTINCTCOUNT(Sales[CustomerID]))
)

Pola-pola ini mencegah hasil yang tidak terduga ketika langkah-langkah digunakan dalam konteks yang tidak diantisipasi oleh penulis asli.

Aggregations

Agregasi adalah tabel ringkasan yang menyimpan total yang telah dihitung sebelumnya pada butir yang lebih tinggi daripada data detail. Kueri mengakses tabel ini terlebih dahulu, yang meningkatkan kinerja pada tabel-tabel fakta yang besar. Saat kueri cocok dengan agregasi, mesin mengembalikan hasil dari tabel ringkasan yang lebih kecil daripada memindai jutaan baris detail.

Agregasi sebagai keputusan desain

Memutuskan kapan harus menambahkan agregasi dan pada granularitas apa adalah keputusan desain. Pemantauan dan penyetelan performa adalah masalah operasional terpisah, tetapi Anda membuat pilihan struktural selama desain model.

Pertimbangkan agregasi saat:

  • Tabel fakta melebihi jutaan baris dan kueri yang umum digunakan meringkas data pada butir yang lebih tinggi (seperti total bulanan menurut wilayah).
  • Pengguna mengalami waktu respons kueri yang lambat pada visual tingkat ringkasan.
  • Sebagian besar interaksi laporan tidak memerlukan detail tingkat baris.

Perbedaan perilaku agregasi menurut mode penyimpanan

Dalam mode Impor, agregasi disimpan sebagai tabel tersembunyi terpisah. Mesin secara otomatis merutekan kueri yang cocok ke tabel agregasi.

Dalam mode Direct Lake, tabel Delta itu sendiri dapat berfungsi sebagai sumber agregasi. Karena Direct Lake membaca file Parquet berbentuk kolom, mesin dapat menangani volume data yang lebih besar tanpa perlu agregasi dalam banyak skenario. Tambahkan agregasi hanya saat pola kueri mengonfirmasi kebutuhan.

Tip

Pelajari selengkapnya tentang agregasi yang ditentukan user dalam Power BI.