Dalang (Data Analytics LANGuage)
Dalang adalah bahasa analisis data yang mudah dibaca, untuk analis data dan pengguna Excel serta Power BI, dari pemula sampai mahir. Konteks setiap perhitungan tertulis di kode, sehingga setiap angka bisa dijelaskan. Pesan kesalahan dan format angka memakai bahasa Indonesia.
LET sales = LOAD CSV "penjualan.csv"
MODEL Toko
TABLES sales
CALENDAR sales.tanggal
MEASURE Omzet = SUM(sales.nilai)
MEASURE Growth = (Omzet - Omzet PREVIOUS YEAR) / Omzet PREVIOUS YEAR
END MODEL
SHOW Omzet, Growth BY kota WHERE YEAR = 2025
EXPLAIN Growth AT kota = "Jakarta", YEAR = 2025
kota Omzet Growth
------- ----- ------
Bandung 100 100,0%
Jakarta 290 70,6%
Growth = 70,6%
← (Omzet - (Omzet PREVIOUS YEAR)) / (Omzet PREVIOUS YEAR)
← Omzet = 290
← Omzet PREVIOUS YEAR = 170
← filter: kota = "Jakarta" (dari AT)
← filter: YEAR = 2025 (dari AT, lewat CALENDAR sales.tanggal)
Pemasangan
Dalang membutuhkan Python 3.10 atau lebih baru.
pip install dalang
dal --version
| Tambahan | Perintah | Untuk |
|---|---|---|
grafik |
pip install "dalang[grafik]" |
menyimpan grafik PLOT sebagai PNG |
excel |
pip install "dalang[excel]" |
LOAD EXCEL dan SAVE … AS EXCEL |
semua |
pip install "dalang[semua]" |
keduanya |
Perintah dal
| Perintah | Kegunaan |
|---|---|
dal run laporan.dal |
Menjalankan program. --set nama=nilai mengisi PARAMETER, --show-python menampilkan hasil terjemahan ke Python. |
dal check laporan.dal atau dal check . |
Memeriksa program tanpa menjalankannya: ejaan, nama kolom dari file data, aturan MODEL, dan modul. |
dal test . |
Menjalankan semua blok TEST tanpa mencetak SHOW. Kode keluar 1 bila ada yang gagal. |
dal fmt . atau dal fmt --check . |
Merapikan huruf besar dan indentasi tanpa mengubah arti program. |
dal parse laporan.dal |
Menampilkan cara Dalang membaca program, dengan setiap ekspresi berkurung. |
Contoh pesan kesalahan dari dal check:
Kesalahan di analisis.dal baris 3:
SHOW SUM(sales.nilia)
^^^^^
Kolom "nilia" tidak ada di tabel "sales". Mungkin maksud Anda: "nilai"? Kolom yang tersedia: tanggal, kota, kode, nilai
[GAGAL] analisis.dal: 1 kesalahan
Fitur
Data dan tabel
LOAD CSV,LOAD EXCEL … WITH sheet: "Juni", danLOAD PARQUET. Pemisah CSV (;,,, tab,|) dan tipe kolom dikenali otomatis.SAVE … AS CSV,AS EXCEL, atauAS PARQUET.- Operasi tabel:
WHERE,SELECT,SORT BY … DESCENDING,TOP n tabel BY kolom,RANK,JOIN … ON …,RENAME,REMOVE,FILL, danAPPEND. - Kolom baru atau kolom yang diganti:
LET sales.pajak = nilai * 0.11,LET sales.kota = TRIM(kota). - Ringkasan:
SUM,MEAN,MEDIAN,MIN,MAX,COUNT,COUNTDISTINCT,STDEV, danVARIANCE, denganBY,WHERE,WITH totals: TRUE, danWITH rows: n. PLOT … BY …: grafik teks di terminal, ditambah PNG biladalang[grafik]terpasang.
MODEL dan measure
MODEL Toko
TABLES sales, products
RELATE sales.kode TO products.kode
CALENDAR sales.tanggal
MEASURE Omzet = SUM(sales.nilai)
MEASURE Omzet_Minuman = Omzet WHERE products.kategori = "Minuman"
MEASURE Per_Produk = MEAN(Omzet) FOR EACH ROW OF products
END MODEL
- Measure dihitung ulang di setiap konteks:
BY,WHERE, danAT kota = "Jakarta", YEAR = 2025. WHEREpada measure mengiris konteks, tidak menimpanya. Untuk melepas filter, tulisIGNORE FILTER kota.AS SHARE OF kotauntuk porsi dari keseluruhan.RELATEmengalirkan filter dari tabel "satu" ke tabel "banyak". Filter dari tabel yang tidak terhubung menjadi pesan kesalahan, bukan total yang berulang.- Total dihitung ulang, bukan dijumlahkan. Baris yang semua nilainya kosong disembunyikan, kecuali dengan
WITH show_empty: TRUE. - Hasil pembagian dua besaran sejenis otomatis ditampilkan sebagai persen.
Waktu
CALENDARmemberi dimensiYEAR,QUARTER,MONTH,WEEK, danDAYtanpa tabel tanggal terpisah.- Pengubah waktu:
PREVIOUS YEAR,LAST 3 MONTH, danYEAR TO DATE,QUARTER TO DATE, atauMONTH TO DATE. - Pengubah waktu tanpa konteks waktu ditolak sebelum program berjalan.
Memeriksa angka
EXPLAIN Omzet AT …menunjukkan rumus, nilai setiap bagian, dan asal setiap filter.TEST "nama" … EXPECT … END TESTmenjaga angka acuan, dandal testmenjalankannya sekaligus.
Analitik
Semua dihitung dalam Python murni tanpa paket tambahan, dan hasilnya sudah dicocokkan dengan numpy.
STATS(kolom)atauSTATS(tabel): statistik deskriptif. Kuartilnya sama denganPERCENTILE.INCdi Excel.CORRELATE(a, b): korelasi Pearson, juga per kelompok denganBY.REGRESS target ON x1, x2, kota: regresi linear dengan p-nilai. Kolom teks menjadi variabel dummy. Hasilnya punya.r2,.koefisien,.p_nilai, dan.prediksi(5, 15, "Jakarta").FORECAST Omzet BY MONTH NEXT 6 MONTH: memilih Holt-Winters, Holt, atau pemulusan sederhana sesuai panjang data, lengkap dengan rentang (WITH level: 0.8), dan memberi peringatan bila data terlalu pendek untuk pola musiman.
Pustaka Python
USE PYTHON "statistics" AS st
USE PYTHON "math" AS m
SHOW st.median(promo.omzet) ' kolom dikirim sebagai daftar
LET promo.log_omzet = m.log(omzet) ' baris demi baris
MEASURE Median = st.median(sales.nilai) ' di dalam MODEL: ikut BY, WHERE, AT, EXPLAIN
Modul dan kerja tim
USE "toko.dal" AS tokomemakai data, MODEL, dan fungsi dari file lain. Isinya selalu dipanggil lewat alias:toko.Omzet,toko.products,toko.Pajak(x).- Modul hanya berisi definisi, sehingga memakai modul tidak pernah menampilkan atau menyimpan apa pun.
USEyang saling memakai ditolak.
Ekspor
EXPORT Toko TO DAX: tabel kalender, relasi, dan measure untuk Power BI.WHEREpada measure menjadiKEEPFILTERS, dan pengubah waktu menjadiDATEADD,DATESINPERIOD, atauDATESYTD.EXPORT Omzet BY kota, YEAR TO SQL: satu kueriSELECT … GROUP BYyang berjalan sama di DuckDB dan PostgreSQL.- Measure yang tidak bisa diterjemahkan ditulis sebagai komentar beserta alasannya.
Keamanan: nilai dari program tidak pernah disambung ke teks SQL. Semua nilai dikirim sebagai parameter kueri.
Buku dan contoh
Buku Analisis Data dengan Dalang: Panduan lengkap dari pemula hingga mahir membahas semua fitur di atas dalam 17 bab, dari program pertama sampai studi kasus lengkap. Folder examples/ berisi Program Target 1–9, kasus kesalahan E1–E6, data buku (penjualan.csv, produk.csv, bulanan.csv, promo.csv), contoh modul (toko.dal), dan studi kasus Bab 17 (examples/kasus/).
Belum didukung
Fitur berikut memberi pesan yang jelas dan program tidak dijalankan sebagian:
EXPORT … TO PYTHON,ASK,USE R, danUSING R;SORT BYpadaSHOWyang berisi measure (gunakanRANK);WHEREdi akhir perintahEXPORT(tulis syaratnya di measure:EXPORT (Omzet WHERE YEAR = 2025) BY MONTH TO SQL);- fungsi Python atas kolom bersama
BYdi luar MODEL (gunakanMEASURE); - pengubah waktu yang menggeser filter periodik seperti
WHERE MONTH = 3(gunakanBY MONTHatauWHERE YEAR = …).
Riwayat versi
Rincian lengkap ada di file CHANGELOG.md di dalam paket sumber.
| Versi | Isi utama |
|---|---|
| 0.6.4 | Perbaikan dari penulisan buku: kolom yang ada diganti di tempat, fungsi Python atas kolom dan di dalam measure, FORECAST atas measure modul, TOP/RANK atas tabel modul, SQL yang sama di PostgreSQL, dan dal check untuk folder |
| 0.6.3 | Filter dari tabel tanpa RELATE menjadi kesalahan, dan TOP n kolom BY measure |
| 0.6.2 | Urutan evaluasi pengubah, LET … AS DATE, dan tampilan tahun |
| 0.6.1 | dal check mengikuti RENAME dan REMOVE |
| 0.6.0 | dal fmt dan dal test |
| 0.5.0 | Modul .dal dan EXPORT … TO SQL |
| 0.4.0 | FORECAST, REGRESS, STATS, dan CORRELATE |
| 0.3.0 | JOIN, RANK, file Excel dan Parquet, dan EXPORT … TO DAX |
| 0.2.0 | MODEL: measure yang dihitung ulang di dalam konteks |
| 0.1.0 | Rilis pertama: LOAD CSV, SHOW, PLOT, alur program, dan dal check |
Pengembangan
pip install -e ".[dev]"
pytest
Tes ada di folder tests/, dan program di examples/ dipakai sebagai golden test.
Lisensi
Dalang dirilis di bawah Apache License 2.0 (lihat file LICENSE).
Metadata
Release files for dalang 0.6.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dalang-0.6.4.tar.gz | 131.8 kB | Without provenance | Details for dalang-0.6.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dalang-0.6.4-py3-none-any.whl | Python 3 | none | any | Details for dalang-0.6.4-py3-none-any.whl |
Total release size: 241.2 kB
Release files / dalang-0.6.4.tar.gz
| Download URL | dalang-0.6.4.tar.gz |
|---|---|
| Size | 131.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
86d6fca57b298a70a84cd8b0ed24476f987f366323b106304af6a4a918987825
|
|
BLAKE2b-256 checksum How to use checksums |
c0acf98067b185ae4b55030d18cfe7ce26bcc66ab598b54ef9de07d460fd76b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / dalang-0.6.4-py3-none-any.whl
| Download URL | dalang-0.6.4-py3-none-any.whl |
|---|---|
| Size | 109.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f649ac813fd8132bacaf0caae9ff455d4e0b208a7d29dd76f7db4f6f99553070
|
|
BLAKE2b-256 checksum How to use checksums |
d84d4bcea3c53757e70e7475c284836a851be54f6a1599e2bcaf04b925b78125
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for dalang 0.6.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.