- Alat visualisasi berbasis sintaks SQL yang menggabungkan pengambilan data dan penyusunan grafik dalam satu alur melalui klausa seperti
VISUALIZE, DRAW, PLACE, SCALE, dan LABEL
- Dapat memetakan kolom ke atribut visual dan menyusun scatter plot, bar chart, histogram, boxplot, hingga elemen anotasi dalam struktur yang sama dengan cara komposisi layer
- Hasil query SQL langsung diteruskan sebagai input visualisasi, dan beberapa layer memiliki struktur yang hanya mengambil agregasi melalui eksekusi satu query SQL, sehingga menguntungkan untuk pemrosesan data skala besar
- Dirancang sebagai berkas eksekusi kecil dan terfokus yang bisa digunakan tanpa runtime R atau Python, sehingga cocok untuk integrasi dengan alat pelaporan berbasis kode dan asisten analisis AI
- Versi saat ini adalah alpha-release, dengan rencana ekspansi seperti writer berperforma tinggi, tema, interaktivitas, language server, formatter, dan dukungan data spasial
Pengenalan ggsql
- ggsql adalah implementasi grammar of graphics berbasis sintaks SQL yang menambahkan kemampuan visualisasi terstruktur ke dalam SQL
- Dapat digunakan di Quarto, Jupyter notebooks, Positron, VS Code, dan lainnya
- Dirancang agar pengguna SQL dapat menulis kode visualisasi dengan cara yang terasa familier
- Susunan klausa SQL yang deklaratif dan dapat dikombinasikan juga diterapkan pada tata bahasa visualisasi
- Menjelaskan motivasi dan contoh penggunaan sambil menguraikan sintaks inti ggsql
Contoh dasar
-
Plot pertama
- Dapat membuat scatter plot dengan dataset bawaan
penguins
VISUALIZE bill_len AS x, bill_dep AS y FROM ggsql:penguins
DRAW point
- Pada
VISUALIZE, kolom data dipetakan ke atribut visual, dan DRAW point membuat layer titik menggunakan pemetaan dasar tersebut
- Hanya dengan menambahkan
species AS color, pemisahan kategori warna bisa diterapkan
VISUALIZE bill_len AS x, bill_dep AS y, species AS color FROM ggsql:penguins
DRAW point
- Dengan menambahkan
DRAW smooth, layer garis regresi dapat ditumpuk di atas layer titik
- Pemetaan warna per spesies tetap dipertahankan sehingga garis terpisah dibuat untuk tiap species
- Mengadopsi pendekatan kombinasi komponen modular alih-alih jenis plot yang sudah ditentukan sebelumnya
- Dengan struktur yang sama, dapat beralih ke visualisasi yang sama sekali berbeda
VISUALIZE island AS x, species AS color FROM ggsql:penguins
DRAW bar
-
Contoh lengkap
- Bagian atas adalah query SQL biasa, sedangkan setelah
VISUALIZE dibedakan sebagai query visualisasi
- Dalam contoh ini digunakan backend DuckDB
- Pada bagian SQL,
ROW_NUMBER() dan QUALIFY digunakan untuk menyisakan hanya misi terbaru per nama dari astronauts.parquet
- Lalu dua himpunan digabungkan
year_of_selection - year_of_birth dihitung sebagai age dan diberi kategori Age at selection
year_of_mission - year_of_birth dihitung sebagai age dan diberi kategori Age at mission
- Kedua hasil digabungkan dengan
UNION ALL
- Dalam query visualisasi, setelah memetakan
age AS x dan category AS fill, digunakan DRAW histogram
- Menetapkan
SETTING binwidth => 1, position => 'identity'
PLACE rule menambahkan anotasi posisi rata-rata yang telah dihitung sebelumnya
x => (34, 44), linetype => 'dotted'
PLACE text menambahkan anotasi teks
x => (34, 44, 60)
y => (66, 49, 20)
- Label mencakup
Mean age at selection = 34, Mean age at mission = 44, John Glenn was 77 on his last mission - the oldest person to travel in space!
- Menetapkan
hjust => 'left', vjust => 'top', offset => (10, 0)
SCALE fill TO accent mengubah nilai pemetaan fill ke palet warna accent
- Klausa
LABEL mengontrol judul, subjudul, label sumbu x, dan label legenda
- Judul
How old are astronauts on their most recent mission?
- Subjudul
Age of astronauts when they were selected and when they were sent on their mission
- Sumbu x
Age of astronaut (years)
fill => null
Struktur query visualisasi
- Sebelum
VISUALIZE adalah SQL murni, dan tabel hasilnya tidak dikembalikan sebagai tabel melainkan langsung diteruskan sebagai input visualisasi
- Tabel atau CTE yang dibuat pada bagian SQL dapat dirujuk dalam query visualisasi
- Jika data sudah dalam bentuk yang cocok untuk visualisasi, bagian SQL dapat dihilangkan
VISUALIZE year_of_selection AS x, year_of_mission AS y FROM 'astronauts.parquet'
VISUALIZE atau VISUALISE menandai akhir query SQL dan awal query visualisasi
- Pemetaan berfungsi menghubungkan kolom ke atribut visual, yaitu aesthetics
- Dalam contoh,
age sesuai dengan posisi sumbu x, dan category dengan warna isian
DRAW menambahkan layer ke visualisasi
- Ada tipe sederhana seperti
point, dan ada juga tipe seperti histogram yang membutuhkan perhitungan agregasi berbasis bin
- Layer dirender sesuai urutan definisinya
PLACE adalah klausa saudara dari DRAW, khusus untuk annotation yang memakai nilai literal alih-alih data tabel
- Visualisasi contoh terdiri dari tiga layer: layer histogram, layer annotation garis aturan, dan layer annotation teks
- Satu layer tidak selalu hanya berkorespondensi dengan satu objek grafis, dan bisa merender beberapa objek individual dengan tipe yang sama
SCALE adalah klausa yang mengubah nilai data menjadi nilai yang sesuai untuk aesthetic
- Selain mengubah kategori string menjadi warna aktual, juga bisa menangani transformasi kontinu, mendefinisikan break point, atau mengatur tipe skala seperti ordinal maupun binned
LABEL mendukung penambahan dan pengubahan label teks seperti judul, subjudul, judul sumbu, dan judul legenda
Melangkah mundur sejenak
- Contoh di atas memuat banyak sintaks, tetapi sekaligus mencakup bagian-bagian penting dari tata bahasa intinya
- Banyak query visualisasi bisa berbentuk jauh lebih sederhana dari itu
- Diberikan contoh boxplot tahun kelahiran per gender menggunakan
astronauts.parquet
VISUALIZE sex AS x, year_of_birth AS y FROM 'astronauts.parquet'
DRAW boxplot
- Panjang kode mungkin lebih besar dibanding sistem plotting lain, tetapi memiliki sifat lebih terstruktur, dapat dikombinasikan, dan deskriptif secara mandiri
- Sifat-sifat ini memudahkan pengguna menginternalisasi cara kerja semua jenis plot, dan juga menguntungkan bagi asisten coding LLM di masa depan
- Hubungan yang sama dapat dengan mudah diubah menjadi scatter plot jitter
DRAW point
SETTING position => 'jitter'
- Jitter juga dapat diatur agar mengikuti distribusi data untuk memberi karakter violin plot
SETTING position => 'jitter', distribution => 'density'
- Struktur sintaks dan komposabilitas seperti ini memudahkan pekerjaan berulang dalam analisis eksploratif dan desain visualisasi
Mengapa ggsql
- Diajukan lima alasan pengembangan ggsql
- Untuk mendukung analis data dan data scientist yang terutama bekerja dengan SQL
- Karena SQL dan grammar of graphics sangat cocok satu sama lain
- Untuk membangun alat visualisasi berbasis kode yang kuat tanpa bahasa pemrograman penuh seperti R atau Python
- Karena kemampuan LLM yang sangat baik dalam menangani SQL dan kemungkinan antarmuka visualisasi baru
- Untuk menerapkan 18 tahun pengalaman pengembangan ggplot2 di landasan yang baru
-
Hello, SQL user
- Di tengah revolusi data science yang menyorot R dan Python, SQL tetap menjadi fondasi tepercaya untuk pekerjaan data
- Ada banyak pekerja data yang hanya menggunakan SQL atau sebagian besar menggunakan SQL
- Menurut artikel ini, pilihan visualisasi yang selama ini tersedia bagi mereka umumnya kurang optimal
- Mengekspor data lalu memakai R atau Python
- Menggunakan alat BI berbasis GUI yang kurang mendukung reproduksibilitas
- Menggunakan alat visualisasi langsung di dalam query, namun dinilai belum cukup kuat atau ergonomis
- Sintaks ggsql dirancang agar pengguna SQL dapat langsung memahaminya
- Memanfaatkan ekspektasi terhadap klausa yang deklaratif dan dapat dikombinasikan
- ggsql tidak hanya memperbaiki cara membuat visualisasi, tetapi juga berperan menarik pengguna SQL ke ekosistem pembuatan dan berbagi laporan berbasis kode dengan Quarto
-
Pengolahan data deklaratif, visualisasi deklaratif
- SQL adalah bahasa spesifik domain untuk menangani data relasional yang tersimpan dalam satu atau lebih tabel
- Sintaks SQL didasarkan pada konsep aljabar relasional dan menyediakan cara berpikir yang terstruktur tentang manipulasi data
- Semantik SQL bukan fungsional, melainkan mendefinisikan himpunan operasi modular yang deklaratif
- Grammar of graphics adalah kerangka teoretis yang memecah konsep visualisasi data menjadi komponen modular
- Alat seperti ggplot2 menerjemahkan konsep ini ke implementasi nyata
- Grammar of graphics juga, seperti SQL, mendefinisikan himpunan operasi modular yang deklaratif alih-alih fungsional
- Kedua sistem ini memiliki banyak kesamaan dalam cara mendekati domain masing-masing, sehingga memungkinkan pipeline menyeluruh yang alami dan kuat dari data mentah hingga visualisasi akhir
-
No runtime, no problem
- ggplot2 memerlukan instalasi R, dan plotnine memerlukan instalasi Python
- Sebaliknya, alat visualisasi berbasis berkas eksekusi tunggal yang ringkas memiliki keunggulan yang jelas
- Menanamkan berkas eksekusi kecil ke alat lain lebih mudah daripada membundel atau mewajibkan instalasi R/Python
- Karena cakupannya kecil, lebih mudah membatasi eksekusi kode yang berbahaya atau tak disengaja melalui sandbox
- Karakteristik ini menjadikan ggsql pilihan yang lebih menarik untuk integrasi dengan asisten analisis AI atau alat pelaporan berbasis kode yang menjalankan kode di berbagai lingkungan
- Meninggalkan bahasa terinterpretasi memang membawa keterbatasan, tetapi juga memberi banyak keuntungan
- Keuntungan terpentingnya adalah berkat struktur yang ketat, backend dapat menjalankan seluruh pipeline data per layer sebagai satu query SQL tunggal
- Sebagai contoh, saat membuat bar plot dari 10 miliar data transaksi, hanya nilai count untuk tiap batang yang diambil dari data warehouse, bukan seluruh 10 miliar barisnya
- Prinsip yang sama juga berlaku untuk tipe layer yang lebih kompleks seperti boxplot dan density plot
- Ini kontras dengan kebanyakan alat visualisasi yang lebih dulu mematerialisasi seluruh data, lalu menghitung dan mem-plot-nya
-
SELECT pod_door FROM bay WHERE closed
- Sudah terbukti bahwa LLM sangat efektif dalam mengubah bahasa alami menjadi SQL
- Dinyatakan adanya harapan bahwa tingkat efektivitas yang sama juga dapat diterapkan pada ggsql
- Di
querychat, eksplorasi data visual berbasis bahasa alami sudah dimungkinkan melalui ggsql
- Karena ggsql memiliki runtime yang lebih aman dan ringan dibanding R atau Python, ada keyakinan lebih tinggi saat menerapkan coding agent di lingkungan produksi
-
We are now wise beyond our years
- Selama 18 tahun pengembangan dan pemeliharaan ggplot2 berarti ada 18 tahun akumulasi pemikiran tentang tata bahasa visualisasi data, kegunaan, dan desain
- Tidak semua pengetahuan itu bisa dimasukkan kembali ke ggplot2
- Keputusan lama dan ekspektasi pengguna harus dihormati, dan bahkan bila ditantang pun hanya bisa dilakukan sangat bertahap
- ggsql adalah blank slate
- Proyek yang dibangun ulang dari nol
- Sistem yang dirancang untuk lingkungan tanpa ekspektasi lama tentang alat visualisasi
- Disebutkan bahwa titik awal seperti ini memberi rasa bebas dan energi dalam proses pengembangan, dan hal itu juga tercermin pada pengalaman pengguna
Masa depan
- Versi saat ini adalah alpha-release dan belum selesai
- Diberikan daftar non-ekshaustif dari hal-hal yang ingin ditambahkan ke depan
- Writer baru berperforma tinggi yang ditulis dari nol dalam Rust
- Infrastruktur tema
- Interaktivitas
- Alur deployment end-to-end dari Posit Workbench atau Positron hingga Connect
- ggsql language server penuh dan formatter kode
- Dukungan data spasial
-
Apa artinya bagi pengembangan ggplot2
- Disebutkan bahwa pengguna ggplot2 mungkin melihat pengumuman ggsql dengan campuran rasa khawatir dan antusias
- Jawaban atas pertanyaan apakah Posit meninggalkan ggplot2 dan berfokus pada ggsql adalah tidak
- ggplot2 sudah sangat matang dan stabil, tetapi tetap akan terus didukung dan dikembangkan
- Diharapkan proses pengembangan ggsql juga akan membantu menghadirkan fitur-fitur baru ke ggplot2
Pelajari lebih lanjut
- Jika ingin langsung mencoba ggsql, panduan instalasi dan tutorial tersedia di bagian Getting started di situs web ggsql
- Halaman dokumentasi menampilkan seluruh kemampuan yang didukung ggsql
- Disebutkan pula bahwa mereka menantikan masukan tentang pengalaman pengguna
1 komentar
Opini Hacker News
Mungkin karena saya hanya membacanya sekilas, tetapi dari posting blog dan dokumentasinya saya merasa hubungannya dengan database SQL tidak dijelaskan dengan jelas
Awalnya saya mengira ini semacam DSL visualisasi mirip SQL yang diproses oleh library chart frontend
Dokumen anatomy terbaca seperti itu, tetapi di FAQ pada "Can I use SQL queries inside the VISUALISE clause" tertulis bahwa sebagian sintaks diteruskan langsung ke database
Di halaman utama tertulis "ggsql interfaces directly with your database", tetapi tidak begitu terlihat bagaimana cara terhubungnya sehingga terasa membingungkan
ggsql bisa terhubung langsung ke backend database, dan jika diinginkan juga bisa dijalankan dengan DuckDB in-memory
Query visualisasi diterjemahkan menjadi query SQL untuk tiap layer visualisasi, lalu tabel hasilnya dipakai untuk rendering
Misalnya query seperti
VISUALISE page_views AS x FROM visits DRAW smoothakan diubah menjadi SQL yang menghitung smoothing kernel atas data, lalu titik-titik yang dikembalikan dipakai untuk menggambar line chart finalreader menangani koneksi database dan pembuatan SQL dialect yang sesuai untuk tiap DB
Pada tahap alpha saat ini, yang didukung adalah duckdb, sqlite, dan reader ODBC eksperimental, dan pengembangan terutama berfokus pada DuckDB berbasis file lokal
Ide utamanya adalah mengubah query visualisasi menjadi beberapa query SQL, menjalankannya di database, lalu menyusun chart hanya dari sedikit hasil yang dikembalikan
Jadi meskipun jumlah baris sangat besar, statistik yang diperlukan untuk histogram bisa dihitung lewat SQL, lalu hanya beberapa titik yang dibutuhkan untuk menggambar tinggi batang yang diambil
Default-nya adalah koneksi DuckDB in-memory, dan di CLI bisa terhubung ke file di disk atau URI ODBC lewat
--readerDi Positron, ini bisa diatur lebih mudah lewat pane "Connections", dan di ggsql Jupyter kernel reader bisa ditentukan dengan magic SQL comment
Kami juga berencana memperkuat dokumentasi soal integrasi dengan alat eksternal seperti ini
SQL adalah bahasa manipulasi data deklaratif, dan memang sering dipakai untuk meng-query database, tetapi tidak terikat hanya pada database
SQL bisa diterapkan pada flat file, stream data, atau data di memori program
Sebaliknya, menurut saya database juga bisa di-query tanpa SQL
Saat membaca sekilas, saya mencoba mencari penjelasan kenapa ini dibutuhkan dan masalah apa yang diselesaikannya, tetapi tidak langsung terasa
Saya sempat mengira ini untuk memvisualisasikan tabel dari database SQL jarak jauh secara langsung, sambil menghilangkan langkah menariknya dulu ke R data frame lalu menjalankan ggplot
Tapi saya juga bertanya-tanya kenapa harus membuat bahasa mirip SQL yang baru
Di R sudah ada dbplyr yang menerjemahkan antara R dan SQL, jadi bukankah akan lebih langsung jika ggplot diperluas agar mendukung objek tbl dari dbplyr secara langsung dan menghasilkan SQL
Atau mungkin karena SQL sendiri sudah sangat akrab, sehingga diasumsikan banyak orang ingin melakukan pekerjaan ala ggplot dengan sintaks ini
Baru setelah hampir selesai membaca dokumentasinya, saya paham bahwa ini adalah aplikasi visualisasi mandiri dengan backend DuckDB dan SQLite, saat ini merender dengan Vegalite, dan ke depan ingin menambah backend serta renderer
Seperti komentar di bawah, ini tampaknya alat untuk memungkinkan pengguna yang berpusat pada SQL membuat visualisasi tanpa harus tahu Python atau R
Tentu saya setuju bahwa tulisan pengumumannya seharusnya menjelaskan hal itu dengan lebih baik
Menurut pengalaman saya, bahasa bersama yang sering dimiliki analis, ilmuwan, dan engineer pada akhirnya adalah SQL
Hal yang sama memang bisa dilakukan di R, tetapi proyek nyata tidak selalu ditulis dalam R atau Python, sementara database SQL dan engine aksesnya biasanya sudah ada
Saya juga sering memakai sel SQL dengan DuckDB backend di marimo notebook, dan akan sangat nyaman jika bisa melakukan plotting langsung dari SQL di sana
Terakhir, saya selalu merasa API plotting Python cukup sulit dihafal dan dikuasai
Bahkan untuk menggambar scatterplot sederhana dengan matplotlib pun boilerplate-nya terlalu banyak, jadi menurut saya akan bagus jika ada sintaks yang seragam di dalam bahasa query yang sama
Titik menariknya ada pada kombinasi SQL sebagai antarmuka dan formalitas GoG ketimbang pada library tertentu
Renderer atau runtime aktual memang penting, tetapi menurut saya itu lebih dekat ke detail implementasi
Tentu ini bukan sesuatu yang mustahil dilakukan dengan jumlah baris kode serupa di R, Python, atau matplotlib
Tetapi mensandboxing lingkungan seperti itu agar aman terhadap input berbahaya itu sulit, sedangkan dengan bahasa deklaratif seperti ini akan lebih mudah meng-host layanan di mana pengguna tak tepercaya memasukkan ggsql dan hasilnya hanya chart yang dihasilkan
Dalam arti itu, ini jelas berguna
Tetapi untuk sebagian besar penggunaan umum, mungkin tetap lebih mudah meminta LLM favorit Anda menghasilkan kode matplotlib
Saya mendukung proyeknya, dan sangat setuju bahwa konsep ini sangat cocok dengan SQL
Di R, struktur menyiapkan data dengan WITH lalu menambahkan VISUALIZE setelahnya hampir sama dengan cara saya menulis kode plotting
Namun selain kelebihan sebagai DSL yang sederhana, saya masih belum yakin apa kelebihannya dibanding ggplot2 sampai layak menanggung biaya membuat DSL lagi
Hampir satu-satunya alasan saya meninggalkan ggplot2 untuk visualisasi adalah karena begitu keluar dari kasus standar di mana geom sudah tersedia, membuat visualisasi non-standar menjadi cukup sulit
Saat ingin membuat sesuatu yang sedikit berbeda, sering kali jauh lebih mudah turun ke primitive drawing tingkat bawah daripada memaksa membuat adaptor yang ramah ggplot
Bahkan membungkus spesifikasi parsial yang sering dipakai ke dalam fungsi pun terasa kurang mulus tergantung apakah itu dikomposisikan dengan
+atau dirangkai dengan pipe seperti|>atau%>%Dan kami sama sekali tidak berencana menghentikan pengembangan ggplot2
ggsql sebagian adalah proyek untuk menjangkau kelompok pengguna baru dan menempatkan visualisasi yang kuat dalam konteks baru
Jika Anda menghabiskan sebagian besar waktu di R, kemungkinan Anda bukan pengguna inti yang dituju
Meski begitu, ada beberapa unsur menarik yang tidak dimiliki ggplot2, jadi mungkin tetap menyenangkan untuk dieksplorasi
|>dan%>%bukan operator yang samaBase pipe
|>yang relatif lebih baru memang lebih cepat, tetapi tidak mendukung fitur seperti placeholder titik di%>%untuk meneruskan ke posisi selain argumen pertama fungsiKarena itu, pada beberapa kasus
%>%bisa membuat ekspresi sedikit lebih rapiIni benar-benar terasa bagus
Kami juga sampai pada kesimpulan serupa saat membuat GFQL, yaitu graph dataframe query language
Secara khusus, kami membutuhkan antarmuka yang ramah LLM untuk stack visualisasi dan analisis yang bisa dipakai tanpa code sandbox
Kami melihat bahwa hanya dengan ekstensi opencypher dasar pun sudah bisa dibuat pipeline analisis visual GPU yang cukup kaya, dan karena alasan yang sama pendekatan menuju SQL di dunia tabel juga tampak sangat masuk akal
Untuk contoh dari sisi GFQL, Anda bisa melihat overall pipelines yang mencakup data loading, transformasi shape, enrichment berbasis algoritme, visual encoding, dan pipeline kelas satu, serta declarative visual encodings dalam bentuk pemanggilan sederhana
Ini terlihat cukup bagus
Hanya saja saya merasa akan bagus jika ada cara yang bisa degradasi dengan elegan bahkan di lingkungan yang tidak mendukung sintaksnya
Saya juga pernah merancang pendekatan serupa di dalam SQL, meski jauh lebih sederhana daripada GoG, dan pendekatan itu bisa mengalami degradasi
Sintaksnya memang tidak enak dibaca, tetapi bentuknya seperti sqlnb spec
Kalau bisa, akan bagus jika Anda menjelaskannya sedikit lebih konkret
Alat lain dalam arus yang sama adalah Shaper berbasis DuckDB
Pendekatannya menangani seluruh dashboard dengan cara SQL-first, dan dari dokumen getting started arahnya terasa mirip
Pertama-tama, ggsql terlihat sangat keren dan saya ingin segera mencobanya
Tetapi ada satu hal yang terasa mencolok hilang dari dokumentasinya, yaitu sulit menemukan penjelasan tentang format output
Apakah bisa diekspor ke PDF, apakah mendukung SVG atau PNG, dan bagaimana mengatur kontrol output seperti ukuran lebar-tinggi tidak begitu terlihat
Petunjuk terdekat yang saya temukan hanya
chart.display()danchart.save("chart.html")di dokumentasi library PythonOutput ini sudah bisa dirender menjadi chart interaktif, SVG, PNG, dan lain-lain dengan alat yang sudah ada, dan kontrol seperti ukuran pun mengikuti pengaturan alat tersebut
ggsql Jupyter kernel bisa memakai spesifikasi vegalite ini untuk menampilkan chart di dalam dokumen Quarto
Ke depan kami berencana membuat writer berkinerja tinggi baru yang tidak melalui tahap perantara vegalite ini, jadi pada saat itu kami mungkin bisa memberi jawaban yang lebih jelas untuk pertanyaan seperti ini
Saya penasaran apakah ada rencana integrasi dengan paket ekstensi ggplot2 di masa dekat atau jauh
Maaf jika ini sebenarnya sudah disebutkan sebelumnya
Tujuan proyek ini bukan untuk menggantikan ggplot2, melainkan menawarkan pendekatan yang berbeda
Ia bisa melakukan banyak hal yang dilakukan ggplot2, dan mungkin juga beberapa hal yang tidak bisa dilakukan ggplot2, tetapi untuk waktu yang lama ke depan saya kira ggplot2 akan tetap lebih kuat untuk banyak pekerjaan
Ini terlihat sangat keren dan saya berencana segera mencobanya
Yang paling mengena bagi saya adalah penjelasan di dokumen grammar
Alurnya memilih data dengan SELECT yang sudah familiar, lalu beralih dari tabel ke plot dengan
VISUALIZEatauVISUALISE, kemudian memetakan aesthetics denganDRAW, lalu menumpukSCALE,FACET, danLABEL, yang terasa meneruskan cara berpikir struktural SQL apa adanyaSaya sangat suka pendekatan layering-nya
Saat mulai melampaui chart dasar, pendekatan ini tampak menyelesaikan dengan baik masalah yang sering saya temui pada alat campuran SQL-visualisasi lain