Spreadsheet dan kemampuannya
Prinsip kerja spreadsheet modern (Microsoft Excel, LibreOffice Calc atau Google Sheets) muncul di akhir 70-an - pertengahan 80-an. Larik sel dua dimensi sebagai model data dan kemampuan untuk menghitung secara otomatis menggunakan rumus muncul di VisiCalc pada tahun 1979. Susunan sel tiga dimensi (kemampuan untuk menggunakan beberapa lembar) pertama kali muncul pada tahun 1985 di Boeing Calc.
Secara teori, spreadsheet sama bagusnya dengan bahasa pemrograman apa pun. Ada mesin Turing yang berbasis rumus Excel ( link ), yang artinya setiap algoritma yang bisa diimplementasikan menggunakan komputer bisa diimplementasikan di Excel. Satu-satunya pertanyaan adalah kenyamanan dan efisiensi implementasi semacam itu.
Dalam praktiknya, saya telah menemukan sistem yang sangat kompleks yang diterapkan di Excel. Misalnya, model keuangan untuk pengembangan bandara internasional dengan kemampuan untuk menyumbangkan berbagai jenis objek (tempat parkir, gudang, jalur, ...) dan menghitung ulang meter persegi dan ruang parkir dalam arus kas (biaya untuk tahun konstruksi vs keuntungan untuk tahun operasi), dengan mempertimbangkan model yang berbeda inflasi. Diperlukan waktu beberapa orang-bulan hingga beberapa orang-tahun untuk "menulis ulang" seperti "excel" di Java menggunakan database relasional. Dalam kasus khusus ini, model relasional dalam database terdiri lebih dari 50 tabel. Yang paling menarik, "penulisan ulang" ini dapat dihindari jika spreadsheet tidak hanya memungkinkan perangkat lunak dibuat, tetapi juga memungkinkan pemeliharaan dan skalabilitas.Untuk pengguna akhir (ekonom), sistem Java adalah langkah mundur, karena dia tidak lagi melihat hasil antara dan tidak dapat mengubah atau melengkapi model itu sendiri.
Ternyata satu masalah yang sama dapat diselesaikan baik dengan spreadsheet dan dengan bahasa pemrograman universal. Artinya kita bisa membandingkan kekuatan dan kelemahan dari kedua alat tersebut sebagai sarana pembuatan aplikasi bisnis. Di sini kita akan mencoba melihat Excel dari sudut pandang seorang programmer arsitek dan menerapkan aturan arsitektur perangkat lunak yang sudah mapan dalam pengembangan perangkat lunak klasik.
Manfaat spreadsheet
- Konsep intuitif : kami masing-masing di sekolah melihat dan mengisi tanda-tanda di selembar kertas dalam kotak dan bermain pertempuran laut. Sebagian besar orang yang bekerja dengan Excel tidak pernah menerima pelatihan khusus (paling-paling, seorang kolega menunjukkan tombol mana yang harus ditekan dalam setengah jam). Ini adalah keuntungan besar dibandingkan bahasa pemrograman di mana "C ++ dalam 21 hari" terdengar terlalu optimis.
- : , , - . breakpoints . . , .
- : , . , UI, .
- : . Notepad, Java . . . , E5 . VLOOKUP . -, .
- : DRY (Donโt repeat yourself โ ). , (, /) . . , , , . . .
- Kurangnya interaktivitas antarmuka : spreadsheet tidak memungkinkan Anda mengubah cara data ditampilkan secara dinamis. Juga tidak mungkin membuat operasi terprogram yang dilakukan, misalnya, dengan menekan sebuah tombol.
Bagaimana cara membuat spreadsheet lebih baik?
Nama saya Vadim. Saya seorang CTO di CubeWeaver dan telah mengembangkan spreadsheet baru selama beberapa waktu sekarang. Beberapa tahun yang lalu saya sudah menulis ( tautan ) tentang versi awal sistem, tetapi sejak itu banyak yang berubah dan tahun ini proyek tersebut telah mencapai tahap komersial.
Berikut adalah daftar inovasi dalam proyek saya yang mengatasi kerugian di atas sambil tetap berusaha mempertahankan manfaat spreadsheet:
Model data multidimensi
Model data multidimensi banyak digunakan dalam Business Intelligence dan sistem OLAP untuk analisis data. Inti dari model ini adalah untuk menyimpan data dalam sel kubus multidimensi, yang ujung-ujungnya ditandatangani oleh tajuk objek bisnis:

Antarmuka program tidak menampilkan seluruh kubus multidimensi, tetapi potongan dua dimensinya sesuai dengan kombinasi filter yang telah kami pilih:

Saat menerapkan model seperti itu dalam sistem BI relasional, skema kepingan salju sering digunakan. Kubus diimplementasikan oleh tabel fakta, dan header wajah disimpan dalam tabel dimensi.
Di sistem saya, kubus disebut lembar kerja, dan judul di tepi kubus disebut item daftar.
Setiap sel pada lembar kerja multidimensi memiliki alamat unik, terdiri dari label di tepinya. Misalnya, nilai 935 pada gambar memiliki alamat: Bikes, 2020, Paris.
Setiap item dalam daftar memiliki nama dan ID. Referensi sel menggunakan pengidentifikasi, dan alamat di atas dalam rumus mungkin terlihat seperti ini (referensi diapit oleh tanda kurung siku):
[PROD:23, YEAR:2020, CITY:24]dengan PROD adalah pengenal dari daftar "produk" dan 23 adalah pengenal dari item "Sepeda".
Penggunaan model multidimensi dapat secara signifikan memperbaiki situasi dengan kerugian nomor 1. Pertama, header sekarang disimpan secara terpisah dari data numerik. Kedua, pengenalan dimensi tambahan "metrik" (atau "posisi laporan") memungkinkan untuk menangani sel bukan dengan nomor urutnya, tetapi dengan arti semantik, menghilangkan kesalahan karena menambahkan atau menghapus kolom atau baris.
Tentu saja, saya harus mengatakan bahwa pendekatan ini sedikit merusak situasi dengan keunggulan nomor 1. Semua orang bermain pertempuran laut, dan hanya beberapa siswa matematika yang bermain catur 4-D. Namun pengalaman menunjukkan bahwa berkat representasi dua dimensi kubus, sebagian besar pengguna dengan cepat terbiasa dengan model data baru.
Fungsi dan metadata GABUNG
Model multidimensi memungkinkan Anda menggunakan metadata untuk mendeskripsikan sel. Metode pengalamatan yang dijelaskan di atas berarti bahwa setiap sel di lembar kerja sesuai dengan sekumpulan item daftar tertentu (misalnya, tahun, produk, dan tempat penjualan). Daftar, pada gilirannya, dapat memiliki atribut (kolom), yang membuatnya tampak seperti tabel relasional biasa. Misalnya, Anda dapat menambahkan kolom mata uang ke daftar tempat penjualan, sehingga menautkan daftar tempat penjualan dan mata uang ke dalam hubungan kardinalitas banyak ke satu.
Fungsi JOIN memungkinkan untuk mereferensikan sel secara dinamis menggunakan hubungan seperti itu. Fungsi ini menggantikan VLOOKUP, menghilangkan kebutuhan untuk bekerja dengan indeks.
Contoh: untuk menghitung jumlah penjualan untuk dunia, Anda harus terlebih dahulu mengonversi jumlah penjualan untuk setiap negara ke dalam satu mata uang (kalikan posisi โpenjualanโ dengan nilai tukar). Di Excel, kami akan menyimpan 2 tabel: daftar negara dengan mata uang untuk setiap negara dan daftar mata uang dengan nilai tukar. Untuk menemukan kurs yang benar, kita akan menggunakan fungsi VLOOKUP dua kali: temukan kode mata uang dengan nama negara dan temukan kurs dengan kode mata uang.
Referensi ke sel dengan nilai tukar dapat terlihat seperti ini:, di
EX_RATES.[COUNTRY.join(CURRENCY)]mana
EX_RATESnama lembar kerja dengan nilai tukar
COUNTRY- dimensi dengan negara
CURRENCY- dimensi dengan mata uang
Rantai tautan bisa berapa saja, misalnya:
STORE.join(COUNTRY).join(CURRENCY)
Faktanya, saat kami membuat model, kami membuat garis luar kepingan salju. Fungsi JOIN memungkinkan rumus untuk secara dinamis mereferensikan sel di lembar kerja menggunakan tautan antar tabel (daftar) dari skema itu. Dalam kasus ini, ketergantungan antar sel ditentukan secara eksplisit dalam argumen fungsi JOIN.
Area validitas rumus
Kemampuan untuk menentukan area efek menghilangkan kebutuhan untuk menyalin rumus.
Untuk setiap dimensi kubus, kami menentukan sekumpulan elemen yang berfungsi rumus, seperti: semua tahun, produk dari jenis "sepeda", item laporan "pendapatan". Dalam praktiknya, terlihat seperti ini (Tujuan rumus ditandai dengan warna biru, argumennya ditandai dengan warna merah dan oranye. Daftar elemen yang dipilih untuk setiap dimensi ada di bagian bawah layar):

Pendekatan ini memperbaiki cacat nomor 2 dan memungkinkan Anda menambah dan menghapus item atau bahkan dimensi tanpa mengubah rumus. Ini juga menghilangkan kebutuhan untuk mencari semua sel tempat rumus disalin setiap kali kita ingin mengubahnya.
Interaktivitas sel
Inovasi ini memungkinkan Anda membuat antarmuka interaktif menggunakan rumus. Rumus dapat digunakan tidak hanya untuk menghitung nilai sel, tetapi juga untuk memformat sel (pemformatan sel), mengubah warna sel (warna sel) dan untuk menyembunyikan atau memperlihatkan sekelompok sel atau seluruh kolom atau baris (visibilitas sel). Sel dapat diformat tidak hanya sebagai angka, tanggal, dan teks, tetapi juga sebagai tombol, kotak centang, dan dropdown.
Jadi, misalnya, warna sel bisa berubah bergantung pada nilai sel. Kotak centang atau daftar pilih di satu lembar bisa memperlihatkan, menyembunyikan, atau mengunci sel di lembar lain.
Tombol dalam sel memungkinkan Anda membuat operasi yang cukup kompleks pada nilai sel. Saat membuat tombol, kami menetapkan target operasi (rentang sel) dan rumus, yang dijalankan satu kali untuk setiap sel target. Ada beberapa operasi pada satu tombol. Jadi, menekan tombol dapat, misalnya, menyalin data dari tahun sebelumnya ke tahun berikutnya, atau mendistribusikan konten sel di antara beberapa sel lain, secara proporsional ke beberapa nilai (percikan).
Tombol yang digabungkan dengan pembatasan akses pengguna memungkinkan fungsionalitas yang tidak dapat diubah. Jadi, misalnya, pengguna yang mengakses tombol, tetapi tidak mendapatkan akses ke sel target, akan dapat menulis ke sel hanya sesuai dengan rumus di tombol tersebut.
Kesimpulan
Prosesor spreadsheet baru memungkinkan model yang jauh lebih kompleks daripada yang dimungkinkan di sistem lain. Pada saat yang sama, modelnya tetap jelas dan mudah dirawat. Kemungkinan kesalahan dalam rumus juga berkurang secara signifikan.
Harga yang harus dibayar untuk keuntungan ini adalah meningkatnya kompleksitas sistem. Sebelum memulai pekerjaan, pengguna harus membuat model data berupa daftar dan kubus.
Secara umum, sistem dirancang untuk pengguna yang lebih melek teknis daripada Excel (misalnya, ekonom dengan pengetahuan pemrograman dasar atau pemrogram yang mengerjakan model ekonomi).
Saya akan dengan senang hati menjawab pertanyaan Anda di komentar atau pesan pribadi. Selain itu, di Internet, Anda dapat menemukan dokumentasi untuk sistem dan beberapa video pelatihan.