Skip to main content

Membuat Grafik Dinamis di MS Access

Mungkin tidak semua pengguna Access mengetahui bahwa aplikasi database ini mempunyai kemampuan dalam menyajikan grafik layaknya sebuah spreadsheet macam Excel. Bahkan kita bisa menampilkan grafik secara dinamis, di mana data bisa kita ubah sesuai dengan parameter/variabel yang dimasukkan.
Gambar 1. Bagian-bagian chart di Access

Pada posting berikut ini, kita akan membuat grafik yang bisa berubah secara dinamis, sesuai dengan variabel yang dimasukkan. Untuk itu, kita akan menggunakan database grafik yang sudah kita buat sebelumnya di posting yang berjudul Membuat Grafik di Form Menggunakan Wizard. Bagi yang belum mempunyai file database grafik itu, silakan download pada link download yang tersedia di bawah. Adapun, file database yang didownload bernama grafikPemula.zip, sedangkan isi dari file zip itu adalah grafik.accdb yang terdiri dari dua buah objek di dalamnya. Objek pertama adalah table yang bernama tblSalesSummary, sedangkan objek yang kedua adalah form yang bernama frmGrafik.

Untuk membuat grafik dinamis, ikuti petunjuk di bawah ini.
  1. Buka Design View dari form frmGrafik yang ada di file grafik.accdb.
  2. Sisipkan form header/footer, caranya, pada area form, klik mouse kanan untuk menampilkan shortcut dan pilih show Form header/Footer.
  3. Di dalam Form header, sisipkan sebuah combo box dengan properti sebagai berikut:
    1. Name=cbbKategori
    2. Row Source Type= Field List
    3. Row Source="SELECT Spec, Country, Region FROM tblSalesSummary"
  4. Masih dalam Form header, sisipkan sebuah tombol perintah (command button) dengan properti sebagai berikut:
    1. Name=cmdTampilkan
    2. Caption=Tampilkan
    3. On Click=[Event Procedure]
Lihat Gambar 1 di atas.

Langkah selanjutnya, kita memodifikasi chart control yang bernama crtGrafik dengan menambahkan kode VBA di modul form Form_frmGrafik. Sisipkan kode VBA berikut ini: Pada event procedure Private Sub cmdTampilkan_Click(), sisipkan deklarasi variabel sebagai berikut:
  1. Dim cht As Graph.Chart, melakukan pengaturan global untuk objek yang berupa chart control yang bernama crtGrafik.
  2. Dim chtSeries As Graph.Series, digunakan untuk merinci object series dari cht
  3. Dim chtLabel As Graph.DataLabel, digunakan untuk merinci label object yang ada di cht
  4. Dim strSql As String, digunakan untuk mengatur row source dari chart control yang bernama crtGrafik
  5. Dim strSql1 As String Dim dblMax, dblMin As Double, digunakan untuk mengatur tinggi minimum dan maksimum dari grafik
  6. Dim byAxisTitleSize As Byte, digunakan untuk mengatur ukuran font.
  7. Dim qdf As dao.QueryDef, digunakan untuk membuat query temporer.
Setelah deklarasi variabel selesai dilakukan, kita melakukan pengaturan awal grafik dengan mengubah row source dari crtGrafik sebagai berikut:
  1. strSql = "SELECT [" & Me.cbbKategori & "],format(Sum([WeightInKg]),'#,###.00') AS [Weight] FROM tblSalesSummary GROUP BY [" & Me.cbbKategori & "]"
  2. Me.crtGrafik.RowSource = strSql
Supaya grafik dapat terupdate sesuai dengan parameter yang ada di cbbKategori, maka gambar grafik harus dimuat ulang dengan pernyataan:

Me.crtGrafik.Requery

Selanjutnya, kita mengatur batas minimum dan maksimun ketinggian sumbu vertikal dari grafik yang sifatnya konstan. Caranya adalah dengan menurunkan nilai minimum bila di sumbu x ada nilai negatif terendah (di bawah nol) dan menaikkan nilai maksimumbila di sumbu x ada nilai positif tertinggi (di atas nol).
  1. strSql1 = "SELECT [" & Me.cbbKategori & "],Sum([WeightInKg]) AS [Weight] FROM tblSalesSummary GROUP BY [" & Me.cbbKategori & "]"
  2. Set qdf = CurrentDb.CreateQueryDef("ss", strSql1)
  3. dblMax = CDbl(DMax("[Weight]", qdf.Name)) * 1.15
  4. dblMax = Round(dblMax / 1000000, 2) * 1000000dblMin = CDbl(DMin("[Weight]", qdf.Name)) * 1.15
  5. dblMin = Round(dblMin / 1000000, 2) * 1000000
  6. CurrentDb.QueryDefs.Delete qdf.Name
Nilai minimum/maksimum dicari dari daftar/tabel yang membentuk grafik, yaitu dengan menggunakan fungsi DMin atau DMax seperti terlihat pada contoh di atas. Setelah diketahui, nilai minimum/maksimum kemudian dinaikkan 15% (1.15) untuk membuat grafik lebih enak dilihat. Baris berikut ini merupakan baris yang penting untuk digunakan dalam menampilkan grafik secara dinamis.
  1. byAxisTitleSize = 12, digunakan untuk mengatur ukuran font secara umum.
  2. Set cht = Me.crtGrafik.Object, menetapkan variabel cht sebagai objek dari chart control yang bernama crtGrafik
  3. cht.Floor.Interior.Color = vbWhite, mengatur warna latar belakang menjadi putih.
  4. cht.Application.PlotBy = xlColumns, mengarahkan bentuk .......
Baris berikut ini digunakan untuk mengatur posisi grafik:
  1. cht.Left = 0, grafik diletakkan 0 point di sisi kiri
  2. cht.Top = 0, grafik diletakkan 0 point di sisi atascht.
  3. Width = 800, grafik diletakkan sepanjang 800 point ke kanan
  4. cht.Height = cht.Width * 0.86, grafik diletakkan setinggi 86% dari lebar grafik.
  5. cht.PlotArea.Left = cht.Left + 10, area plot diletakkan 10 point dari posisi grafik bagian kiri.
  6. cht.PlotArea.Top = cht.Top + 60, area plot diletakkan 60 point dari posisi grafik bagian atas.
  7. cht.PlotArea.Width = cht.Width - 90, area plot diletakkan sepanjang lebar grafik dikurangi 90 point.
  8. cht.PlotArea.Height = cht.Height - 200, area plot diletakkan setinggi lebar grafik dikurangi 200 point.
  9. cht.HasTitle=True, mengaktifkan judul grafik
  10. cht.ChartTitle.Top = cht.Top, posisi atas judul grafik diatur sama dengan bagian atas grafik
  11. cht.ChartTitle.Left = cht.Left, posisi kiri judul grafik diatur sama dengan bagian kiri grafik
Judul grafik secara dinamis akan mengikuti parameter dari cbbKategori, yaitu dengan cara:

cht.ChartTitle.Text = "Grafik Penjualan Berdasarkan " & Me.cbbKategori

Untuk mengatur sumbu vertikal, kita menggunakan kode vba berikut ini:
  1. With cht.Axes(xlValue), fokus ke sumbu vertikal (sumbu Y) dari grafik crtGrafik.
  2. .DisplayUnit = xlThousands, tampilkan nilai sumbu vertikal dalam ribuan
  3. With .DisplayUnitLabel, fokus label di sumbu vertikal
  4. .Font.Size = byAxisTitleSize, mengatur ukuran font sama dengan byAxisTitleSize (12)
  5. .Caption = "Dalam Ribuan", membuat keterangan judul untuk sumbu vertikal
  6. .Left = cht.Axes(xlValue).Left - 75, mengatur posisi kiri dari judul.
  7. End With
  8. .MaximumScaleIsAuto = False, menonaktifkan skala otomatis (automatic scale) untuk nilai maksimum .
  9. If Not .MaximumScaleIsAuto Then .MaximumScale = dblMax, jika automatic scale dinonaktifkan, maka tetapkan nilai maksimum sebesar dbMax di atas.
  10. .MinimumScaleIsAuto = False, menonaktifkan skala otomatis (automatic scale) untuk nilai minimum
  11. If Not .MinimumScaleIsAuto And dblMin < 0 Then .MinimumScale = dblMin Else .MinimumScale = 0, jika automatic scale dinonaktifkan dan nilai dblMin kurang dari nol, maka tetapkan nilai minimum sebesar dbMin di atas. Jika nilai dblMin lebih besar atau sama dengan nol, maka nilai dblMin adalah nol.
  12. .MajorUnitIsAuto = False, menonaktifkan skala otomatis (automatic scale) untuk major unit
  13. If Not .MajorUnitIsAuto Then _
    .MajorUnit = (cht.Axes(xlValue).MaximumScale - cht.Axes(xlValue).MinimumScale) / 4

    Jika automatic scale dinonaktifkan, maka major unit dibagi menjadi 4.
  14. .TickLabels.Font.Size = .DisplayUnitLabel.Font.Size, mengatur ukuran font untuk nilai pada sumbu vertikal
  15. End With
Untuk mengatur sumbu horizontal, kita menggunakan kode vba berikut ini:
  1. With cht.Axes(xlCategory), fokus ke sumbu horizontal (sumbu X) dari grafik crtGrafik.
  2. .TickLabels.Font.Size = cht.Axes(xlValue).DisplayUnitLabel.Font.Size, mengatur ukuran font untuk label di sumbu horizontal (=12)
  3. .TickLabels.Orientation = 65, mengatur (dalam hal ini) kemiringan penulisan label
  4. .MajorTickMark = xlTickMarkOutside, mengatur posisi tanda label untuk major scale
  5. .MinorTickMark = xlTickMarkOutside, mengatur posisi tanda label untuk minor scale
  6. .HasTitle = True, mengaktifkan judul sumbu horizontal
  7. If .HasTitle Then, jika judul sumbu horizontal aktif maka
  8. .AxisTitle.Text = CStr(Me.cbbKategori), judul sumbu sama dengan cbbKategori
  9. .AxisTitle.Font.Size = byAxisTitleSize, ukuran font sama dengan byAxisTitleSize (=12)
  10. End If
  11. End With
Untuk mengatur urutan grafik, kita menggunakan kode vba berikut ini:
  1. For Each chtSeries In cht.SeriesCollection, untuk setiap urutan grafik lakukan pengaturan berikut ini
  2. chtSeries.Border.LineStyle = xlNone, menonaktifkan batas pada setiap urutan grafik
  3. chtSeries.BarShape = xlBox, mengatur bentuk urutan grafik menjadi kotak
  4. chtSeries.HasDataLabels = True, mengaktifkan label di setiap urutan grafik
  5. If chtSeries.HasDataLabels Then, jika setiap urutan grafik mempunyai label (label diaktifkan), maka
  6. For Each chtLabel In chtSeries.DataLabels, untuk setiap label dari setiap urutan grafik
  7. chtLabel.Font.Size = 10, mengatur ukuran font label dari setiap urutan grafik sebesar 10 point
  8. Next chtLabel
  9. End If
  10. Next chtSeries
Untuk mengatur legend, kita menggunakan kode vba berikut ini:
  1. cht.HasLegend = False, menonaktifkan legend.
  2. If cht.HasLegend Then, jika legend diaktifkan
  3. cht.Legend.Position = xlLegendPositionBottom, menaruh posisi legend di bagian bawah grafik
  4. cht.Legend.Font.Size = 10, mengatur font legend sebesar 10 point
  5. cht.Legend.Border.LineStyle = xlNone, menonaktifkan batas legend
  6. End If
Berikut ini gambar beberapa grafik yang diproses melalui kode VBA di atas:
Gambar 2. Grafik berdasarkan Spec


Gambar 3. Grafik berdasarkan Region

Bagi pembaca yang ingin memperolah file sample grafik dinamis yang dibuat dengan menggunakan kode VBA, silakan ikuti petunjuk di bawah ini:
  1. Ikuti blog Access Terapan di Facebook dengan mem-follow atau me-like FB page di https://www.facebook.com/AccessTerapan atau follow Google Blog Follower. Bagi yang tidak memfollow, permintaan (request) akan diabaikan.
  2. Kirim email ke admin yanto.e.subroto@gmail.com untuk diikutsertakan menjadi anggota grup Access Terapan. 
  3. Sebagai tanda bukti keanggotaan, admin grup Access Terapan akan mengirimkan email ke alamat yang dituju. 
  4. Selanjutnya, silakan download file zip bernama grafikDinamis.zip yang merupakan Access Database membuat grafik secara dinamis (nama file grafikDinamis.accdb).
    1. Bukalah form frmGrafik dalam format Form View untuk melihat grafik dan ubah kategori seperti yang diinginkan.

    Comments

    Posting Terpopuler

    Normalisasi, Denormalisasi, dan Anomali Database

    Membuat Relasi Database

    Menampilkan Data MySQL dalam Form di Access