Skip to main content

Menggunakan Rekursi Untuk Mengukur Level Kedalaman Hirarki Organisasi atau Data

Satu masalah yang muncul saat kita menggunakan Access dalam hal data yang bertingkat adalah mengukur level kedalaman hirarki (tingkat) organisasi atau data. Data bertingkat ini mempunyai pola seperti orang tua yang beranak cucu cicit, istilahnya parent dan child. Nah, pada bagian ini, kita akan menggunakan rekursi untuk membuat fungsi yang dapat menentukan level kedalaman hirarki organisasi atau data, terutama data yang terdapat dalam sebuah tabel yang mempunyai pola parent dan child.
Misalkan, ada sebuah hirarki organisasi seperti pada gambar di bawah ini.
Gambar Struktur Organisasi
Struktur organisasi di atas mempunyai empat level, Level 1 adalah Presiden Direktur, sedangkan Level 4 adalah Manajer Jaringan. Umumnya, data struktur organisasi seperti di atas dimasukkan ke dalam sebuah tabel dalam field atau kolom yang terdiri dari Id organisasi, Nama Departemen, dan Parent. Field Id merupakan field yang unik yang menunjukkan identitas suatu departemen/bagian/divisi. Field Nama Departemen menjelaskan field Id, sedangkan field Parent menunjukkan kepada departemen/bagian/divisi manakah suatu bagian yang ditunjukkan oleh field Id itu bertanggung jawab.

Pada gambar di atas, Presiden Direktur adalah bagian tertinggi yang ada di Level 1, Id-nya adalah 1, Dalam hal ini bagian ini tidak punya Parent. Di Level 2, misalnya Direktur Operasional, Id-nya 4, mempunyai Parent 1. Artinya, Direktur Operasional bertanggungjawab langsung ke Presiden Direktur. Untuk Level 3, Manajer Pendukung Teknis dengan Id 7 bertanggunjawab ke Direktur Operasional (Parent 4). Selanjutnya, pada Level 4, Manajer Jaringan dengan Id 9 bertanggungjawab ke Manajer Pendukung Teknis (Parent 7). Secara tabel, bentuknya adalah sebagai berikut. Field NamaDept adalah Nama Departemen.
Tabel tblOrganisasi
Id NamaDept Parent
1 President Direktur 0
2 Direktur Pemasaran 1
3 Direktur Umum dan Keuangan 1
4 Direktur Operasional 1
5 Manajer Keuangan 3
6 Manajer Akuntansi 3
7 Manajer Pendukung Teknis 4
8 Manajer Teknis 4
9 Manajer Jaringan 7
Dari gambar struktur organisasi di atas, kita tahu bahwa 4 level merupakan kedalaman struktur organisasi. Namun demikian, pada tabel tblOrgaisasi, kita tidak bisa melihat ada berapa level dalam struktur organisasi itu. Nah, dari sini, kita bisa membuat kode VBA untuk mengukur level kedalaman struktur organisasi. Caranya adalah sebagai berikut: Buatlah tabel dengan nama tabel dan field seperti di atas. Isikan datanya sekalian sebagai sarana uji coba. Setelah itu, salin kode VBA berikut pada modul standar.
'Tempatkan type berikut ini di bagian paling atas dari modul, di bawah Option Explicit
Type HirarkiRekursi
    ID As Long
    Level As Integer
    NamaDept As String
    Parent As Long
End Type
'Tempatkan deklarasi berikut ini di bawah Type HirarkiRekursi
Dim Hirarki() As HirarkiRekursi


Function mengukurKedalamanHirarki() As Integer
Dim intMax As Integer
Dim strSql, strsql1, strsql2, strsql3 As String

    ReDim Hirarki(0)
    Call Rekursi(0, 1)
    
    Dim x As Integer
            Debug.Print "Id  " & "Parent " & "Level " & "NamaDept"
    For x = 1 To UBound(Hirarki)
        With Hirarki(x)
            Debug.Print .ID & "      " & .Parent & "     " & .Level & "   " & .NamaDept
        End With
    Next x
        
    intMax = 0
    For x = 1 To UBound(Hirarki)
      If Hirarki(x).Level > intMax Then intMax = Hirarki(x).Level
    Next x
    Debug.Print vbNewLine & "Kedalaman= " & intMax
    mengukurKedalamanHirarki = intMax
End Function

Function Rekursi(intParent As Integer, ByVal intLevel As Integer)
    Dim rs As Recordset
    Dim strSql As String

    strSql = "Select Id, NamaDept From tblOrganisasi Where Parent = " & intParent & ";"
    
    Set rs = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
    
    Do While Not rs.EOF
        ReDim Preserve Hirarki(UBound(Hirarki) + 1)
        Hirarki(UBound(Hirarki)).ID = rs!ID
        Hirarki(UBound(Hirarki)).Parent = intParent
        Hirarki(UBound(Hirarki)).NamaDept = rs!NamaDept
        Hirarki(UBound(Hirarki)).Level = intLevel
        Call Rekursi(rs!ID, intLevel + 1)        
        rs.MoveNext        
    Loop
    
    rs.Close
    
End Function
Ada dua fungsi yang digunakan, yaitu fungsi Rekursi dan mengukurKedalamanHirarki. Fungsi Rekursi digunakan untuk melakukan semacam iterasi pada tabel tblOrganisasi dari record pertama sampai record terkahir serta untuk menghitung level organisasi. Sedangkan fungsi mengukurKedalamanHirarki untuk menampilkan hasil perhitungan. Untuk menjalankannya, kita hanya perlu memanggil fungsi mengukurKedalamanHirarki seperti pada Immediate Window berikut ini.
? mengukurKedalamanHirarki
Id  Parent Level NamaDept
1      0     1   President Direktur
2      1     2   Direktur Pemasaran
3      1     2   Direktur Umum dan Keuangan
5      3     3   Manajer Keuangan
6      3     3   Manajer Akuntansi
4      1     2   Direktur Operasional
7      4     3   Manajer Pendukung Teknis
9      7     4   Manajer Jaringan
8      4     3   Manajer Teknis

Kedalaman= 4
 4
Hasil perhitungan bisa kita lihat pada angka tertinggi di kolom Level. Di situ angka tertinggi adalah 4. Jadi, tabel tblOrganisasi mempunyai level kedalaman hirarki organisasi = 4.

Kita dapat melakukan pemeriksaan silang hasil perhitungan fungsi mengukurKedalamanHirarki dengan gambar struktur organisasi di atas. Level 4 pada hasil perhitungan sama dengan level 4 pada gambar, yaitu ada di bagian Manajer Jaringan (Id 9). Demikian pula untuk level 3 yang terdiri dari empat bagian, yaitu Manajer Keuangan, Manajer Akuntansi, Manajer Pendukung Teknis, dan Manajer Teknis.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access