Looker Studio Dashboard Usage Intelligence: Automated Metadata Sync via Colab Enterprise
Bagaimana saya merekayasa sistem pemantauan adopsi laporan internal dengan menyalurkan log audit akses data ke BigQuery dan menyinkronkan metadata laporan via API Looker Studio menggunakan Google Colab Enterprise.
Ringkasan Eksekutif
AstraPay menggunakan puluhan dasbor Looker Studio untuk mendukung keputusan produk, operasional, dan finansial sehari-hari. Seiring waktu, dasbor-dasbor baru terus dibuat secara organik oleh berbagai divisi. Namun, kami menghadapi tantangan ketiadaan visibilitas mengenai adopsi dasbor: dasbor mana yang benar-benar aktif digunakan oleh jajaran manajemen, siapa saja penggunanya, dan dasbor mana yang sudah usang (stale) namun masih terus memicu query BigQuery terjadwal di belakang layar secara boros.
Untuk mengatasi ini, saya merancang dan membangun sistem pelacakan otomatis Looker Studio Dashboard Usage Intelligence. Sistem ini menangkap log akses dasbor secara real-time via Cloud Logging Sink, memperkaya data hash ID laporan yang acak menggunakan Looker Studio API lewat skrip otomasi di Google Colab Enterprise, dan menyajikannya kembali dalam sebuah dasbor analisis adopsi internal yang komprehensif.
Desain Arsitektur Aliran Log & Metadata
Alur kerja pengumpulan log dan rekonsiliasi metadata dasbor dirancang agar berjalan secara otomatis dan asinkron tanpa membebani performa pembukaan laporan di sisi pengguna:
sequenceDiagram
autonumber
actor User as Pengguna / Management
participant LS as Looker Studio Report
participant CL as GCP Cloud Logging Sink
participant BQ as BigQuery Tables
participant Colab as Google Colab Enterprise
User->>LS: Membuka / Interaksi Laporan
LS->>CL: Pemicu log audit otomatis
CL->>BQ: Aliran log real-time ke log_table (berisi Report ID & User Email)
Note over Colab: Eksekusi Terjadwal Harian (Daily Cron)
Colab->>LS: Request detail metadata via Looker Studio API
LS-->>Colab: Return Metadata (Report Title, Creator, Create Date)
Colab->>BQ: Sinkronisasi ke metadata_dim_table (Upsert)
Note over BQ: JOIN log_table dengan metadata_dim_table
BQ-->>LS: Sajikan data analitik interaktif di Dasbor Penggunaan
Implementasi Otomasi Python di Colab Enterprise
Log mentah dari GCP Cloud Logging hanya memuat hash ID laporan unik (seperti 0a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d) tanpa judul laporan manusiawi. Untuk melengkapinya, saya menulis skrip otomatisasi Python di Google Colab Enterprise yang berjalan secara harian untuk mengambil metadata asli melalui Looker Studio API.
Berikut adalah cuplikan skrip Python yang mengekstrak metadata laporan dan menulis hasilnya secara terstruktur ke tabel dimensi BigQuery menggunakan service account credentials:
import os
import time
from google.cloud import bigquery
from googleapiclient.discovery import build
import google.auth
# Inisialisasi Google Credentials & BigQuery Client
credentials, project = google.auth.default()
bq_client = bigquery.Client(credentials=credentials, project=project)
# Inisialisasi API Client Looker Studio
# (Menggunakan REST API Looker Studio versi v1)
looker_studio_service = build('lookerstudio', 'v1', credentials=credentials)
def sync_report_metadata():
# 1. Ambil daftar Report ID unik yang terdeteksi di log akses BigQuery
query_distinct_ids = """
SELECT DISTINCT report_id
FROM `prd-data-ap.audit_logs.looker_access_raw`
WHERE report_id IS NOT NULL
"""
query_job = bq_client.query(query_distinct_ids)
rows = query_job.result()
report_ids = [row.report_id for row in rows]
metadata_records = []
# 2. Panggil API Looker Studio untuk mengambil detail metadata per Report ID
for rid in report_ids:
try:
# Memanggil endpoint: lookerstudio.reports.get
report = looker_studio_service.reports().get(name=f"reports/{rid}").execute()
metadata_records.append({
"report_id": rid,
"title": report.get("title", "Untitled Report"),
"creator": report.get("creatorEmail", "unknown@astrapay.com"),
"created_time": report.get("createTime"),
"last_updated_time": report.get("updateTime"),
"sync_timestamp": time.time()
})
# Jeda singkat untuk mematuhi pembatasan API rate-limit
time.sleep(0.2)
except Exception as e:
print(f"Gagal mengambil metadata untuk ID: {rid}. Error: {str(e)}")
# 3. Tulis ulang / Update data metadata ke BigQuery Dimension Table
if metadata_records:
table_id = "prd-data-ap.audit_logs.looker_reports_metadata"
job_config = bigquery.LoadJobConfig(
write_disposition="WRITE_TRUNCATE" # Refresh harian skema dimensi
)
load_job = bq_client.load_table_from_json(
metadata_records, table_id, job_config=job_config
)
load_job.result() # Tunggu hingga selesai
print(f"Sukses menyinkronkan {len(metadata_records)} metadata laporan ke BigQuery.")
if __name__ == "__main__":
sync_report_metadata()
Pemodelan Data & SQL Intelejen Penggunaan
Setelah data dimensi metadata dan fakta log akses terkumpul di BigQuery, saya membuat view terkompilasi yang menggabungkan kedua tabel tersebut. View ini kemudian digunakan sebagai sumber data utama dasbor pemantauan Looker Studio.
Berikut adalah kueri SQL JOIN yang digunakan di BigQuery:
SELECT
log.timestamp AS access_time,
DATE(log.timestamp, "Asia/Jakarta") AS access_date,
log.user_email AS viewer_email,
log.report_id,
-- Gabungkan dengan tabel dimensi hasil sinkronisasi API
COALESCE(meta.title, "Laporan Tidak Terdaftar / Dihapus") AS report_title,
meta.creator AS report_owner,
DATE(TIMESTAMP(meta.created_time), "Asia/Jakarta") AS report_created_date,
-- Tandai jika dasbor diakses oleh pihak eksternal domain
IF(REGEXP_CONTAINS(log.user_email, r'@astrapay\.com$'), 'Internal', 'Eksternal') AS user_type
FROM
`prd-data-ap.audit_logs.looker_access_raw` log
LEFT JOIN
`prd-data-ap.audit_logs.looker_reports_metadata` meta
ON
log.report_id = meta.report_id
WHERE
-- Batasi data historis untuk meminimalkan beban biaya query Looker Studio
log.timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 90 DAY);
Dampak Bisnis & Efisiensi Biaya
Penerapan sistem Looker Studio Dashboard Usage Intelligence ini memberikan dampak nyata pada pengelolaan platform data perusahaan:
- Decommissioning Dasbor Usang: Mengidentifikasi bahwa 32% dasbor yang aktif di GCP tidak pernah dibuka oleh satu pengguna pun dalam 90 hari terakhir. Dasbor-dasbor ini telah dihapus dengan aman.
- Penghematan Biaya Komputasi BigQuery: Penghapusan dasbor usang secara langsung mematikan scheduled queries (kueri terjadwal) dan pembaruan ekstrak data (scheduled extract refreshes) yang berjalan di belakang layar. Hal ini menghemat ribuan GigaBytes volume data scan BigQuery harian, memangkas pengeluaran cloud bulanan GCP.
- Audit Keamanan Data Finansial: Memungkinkan tim keamanan data platform untuk memantau jika ada Report ID sensitif yang dibagikan secara tidak sengaja ke luar domain organisasi
@astrapay.comsecara real-time.