Dalam artikel ini, Anda akan belajar cara membuat grafik garis kemiringan (slope graph) yang dinamis di Power BI untuk menganalisis perubahan data dari tahun ke tahun serta menghitung perubahan persentase dan menambahkan format bersyarat (conditional formatting) dengan menggunakan DAX.
Apa itu Slope Graph?
Grafik garis kemiringan atau slope graph membandingkan dua titik data untuk setiap kategori, dengan garis yang menghubungkan kedua titik tersebut menunjukkan besar dan arah perubahan. Grafik ini sangat berguna untuk melihat perubahan secara cepat dan jelas.
Studi kasus ini akan menggunakan dataset ‘US Candy Distributor’ dari Maven Analytics untuk membandingkan kinerja finansial antar perusahaan permen pada dua periode waktu yang berbeda.
1. Slope Graph Statis
Salah satu pendekatan untuk membuat grafik kemiringan di Power BI adalah dengan memfilter data pada sumbu X sehingga hanya menampilkan dua titik data yang ingin dibandingkan. Meski demikian, metode ini tidak dinamis karena perubahan pada filter (misalnya, menggunakan slicer) tidak akan secara otomatis memperbarui visualisasi.
2. Slope Graph Dinamis
Untuk mengatasi hal tersebut, kita dapat mengimplementasikan rumus DAX berikut untuk membuat slope graph yang dinamis:
Sales_Slope Graph =
VAR FirstYear = MINX(ALLSELECTED(DimDate), DimDate[Year]) -- First selected year
VAR LastYear = MAXX(ALLSELECTED(DimDate), DimDate[Year]) -- Last selected year
RETURN
IF(
SELECTEDVALUE(DimDate[Year]) = FirstYear || SELECTEDVALUE(DimDate[Year]) = LastYear,
SUM(Candy_Sales[Sales]),
BLANK() -- Ensure intermediate years return BLANK()
)
Rumus DAX di atas digunakan untuk menghitung nilai-nilai yang akan ditampilkan pada grafik kemiringan (slope graph). Grafik kemiringan hanya menunjukkan dua titik data: titik awal dan titik akhir. Rumus ini memastikan bahwa hanya nilai-nilai pada tahun pertama dan terakhir yang ditampilkan, sementara tahun-tahun di antaranya diabaikan. Berikut adalah penjelasan rumusnya:
1. Menentukan Tahun Pertama dan Terakhir:
- `FirstYear` dan `LastYear` adalah dua variabel yang digunakan untuk menentukan tahun pertama dan terakhir yang dipilih dalam filter saat ini.
- Fungsi `MINX` dan `MAXX` digunakan untuk mencari tahun minimum dan maksimum dari tabel `DimDate`, dengan mempertimbangkan filter yang sedang aktif.
2. Perhitungan Nilai:
- `IF` statement memeriksa apakah tahun saat ini adalah tahun pertama atau tahun terakhir.
- Jika ya, maka fungsi `SUM(Candy_Sales[Sales])` digunakan untuk menghitung total penjualan pada tahun tersebut.
- Jika bukan tahun pertama atau terakhir, maka fungsi `BLANK()` digunakan untuk mengembalikan nilai kosong, sehingga tahun tersebut tidak ditampilkan dalam grafik.
Cara Kerja dalam Grafik:
- Sumbu X: Sumbu X akan menampilkan dua titik data, yaitu tahun pertama dan tahun terakhir.
- Sumbu Y: Sumbu Y akan menampilkan nilai total penjualan untuk masing-masing tahun tersebut.
- Garis Kemiringan (Slope Graph): Sebuah garis akan ditarik antara kedua titik data, menunjukkan perubahan total penjualan dari tahun pertama ke tahun terakhir. Dengan menggunakan rumus ini, kita dapat menciptakan grafik kemiringan yang dinamis, yang dapat menyesuaikan tampilannya berdasarkan filter yang diterapkan.
Catatan: Atur format sumbu x menjadi ‘Categorical’ agar tahun yang tidak ingin ditampilkan tidak muncul pada sumbu tersebut.
Menambahkan Perbandingan Persentase Perubahan Tahunan dalam Slope Graph
Meskipun mudah untuk melihat perubahan absolut terbesar dengan melihat kemiringan garis, hal ini tidak selalu menunjukkan perubahan persentase terbesar. Untuk memberikan perbandingan yang lebih akurat, kita dapat menambahkan label perubahan persentase ke setiap kategori pada slope graph. Hal ini memungkinkan kita untuk melihat perubahan relatif dalam nilai, bukan hanya perbedaan absolut.
Pada kolom detail label, kita akan menampilkan persentase perubahan tahunan (YoY) dan tahun terakhir berdasarkan filter yang diterapkan. Dalam kasus ini, kita hanya perlu menampilkan label tambahan pada tahun terakhir dan menghilangkan label tambahan pada tahun pertama. Label akan menampilkan simbol ▲ atau ▼ untuk menunjukkan pertumbuhan positif atau negatif, serta nilai persentase perubahannya. Untuk mencapai hal ini, kita perlu membuat perhitungan baru dengan menggunakan rumus berikut:
Revenue_YoY_Change_Graph =
VAR FirstYear =
CALCULATE(
MIN(DimDate[Year]),
ALLSELECTED(Candy_Sales)
)
VAR LastYear =
CALCULATE(
MAX(DimDate[Year]),
ALLSELECTED(Candy_Sales)
)
VAR LastYearValue =
CALCULATE(
SUM(Candy_Sales[Sales]),
DimDate[Year] = LastYear
)
VAR FirstYearValue =
CALCULATE(
SUM(Candy_Sales[Sales]),
DimDate[Year] = FirstYear
)
VAR YoYChange =
IF(
FirstYearValue > 0,
DIVIDE(LastYearValue - FirstYearValue, FirstYearValue, 0),
0
)
RETURN
IF(
SELECTEDVALUE(DimDate[Year]) = FirstYear,
BLANK(),
IF(
YoYChange > 0,
"▲ " & FORMAT(YoYChange, "0.0%"),
IF(
YoYChange < 0,
"▼ " & FORMAT(YoYChange, "0.0%"),
BLANK()
)
)
)
Rumus DAX di atas digunakan untuk menghitung perubahan persentase tahun ke tahun (YoY) pada penjualan permen. Berikut penjelasannya:
1. Menentukan Tahun Pertama dan Terakhir:
- FirstYear dan LastYear adalah dua variabel yang digunakan untuk menentukan tahun pertama dan terakhir yang dipilih dalam filter saat ini.
- Fungsi MINX dan MAXX digunakan untuk mencari tahun minimum dan maksimum dari tabel DimDate, dengan mempertimbangkan filter yang sedang aktif.
2. Menghitung Penjualan Tahun Pertama dan Terakhir:
- LastYearValue dan FirstYearValue digunakan untuk menghitung total penjualan pada tahun terakhir dan tahun pertama, masing-masing. Fungsi CALCULATE digunakan untuk memastikan bahwa perhitungan hanya dilakukan untuk tahun yang sesuai.
3. Menghitung Perubahan Persentase Tahun ke Tahun (YoY Change):
- YoYChange menghitung perubahan persentase antara tahun terakhir dan tahun pertama. Jika FirstYearValue lebih besar dari 0, rumus DIVIDE digunakan untuk menghitung perubahan persentase. Jika FirstYearValue adalah 0, maka YoYChange akan menjadi 0.
4. Memformat Output:
- RETURN statement digunakan untuk menentukan format output.
- Jika tahun saat ini adalah tahun pertama, nilai BLANK() dikembalikan untuk mencegah perhitungan YoY Change.
- Jika tahun saat ini adalah tahun terakhir, maka:
- Jika YoYChange positif, maka akan ditampilkan simbol “▲” diikuti dengan nilai persentase.
- Jika YoYChange negatif, maka akan ditampilkan simbol “▼” diikuti dengan nilai persentase.
- Jika YoYChange adalah 0, maka tidak ada label yang ditampilkan.
(Opsional) Menerapkan Conditional Formatting pada Label Detail
Untuk memberikan visualisasi yang lebih informatif, kita bisa menerapkan format bersyarat (conditional formatting) pada label persentase perubahan. Warna hijau akan digunakan untuk menunjukkan peningkatan, dan warna merah untuk penurunan.
CF_Revenue_YoY Change =
VAR FirstYear =
CALCULATE(
MIN(DimDate[Year]),
ALLSELECTED(Candy_Sales)
)
VAR LastYear =
CALCULATE(
MAX(DimDate[Year]),
ALLSELECTED(Candy_Sales)
)
VAR LastYearValue =
CALCULATE(
SUM(Candy_Sales[Sales]),
DimDate[Year] = LastYear
)
VAR FirstYearValue =
CALCULATE(
SUM(Candy_Sales[Sales]),
DimDate[Year] = FirstYear
)
VAR YoYChange =
IF(
FirstYearValue > 0,
DIVIDE(LastYearValue - FirstYearValue, FirstYearValue, 0),
0
)
RETURN
IF(
YoYChange > 0,
"#6A994E", -- Green for positive change
IF(
YoYChange < 0,
"#BC4749", -- Red for negative change
BLANK() -- No color if YoYChange is 0 or undefined
)
)
Dengan menerapkan dua kalkulasi tersebut, maka kita dapat menampilkan visualisasi berikut: