diff --git a/_quarto.yml b/_quarto.yml index d50225f..dff1586 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -48,11 +48,23 @@ website: - href: release/feidlambda.qmd - href: release/feidlambda-0-2-0.qmd - href: release/feidlambda-0-1-0.qmd + - text: Greenhorn + menu: + - text: "Greenhorn" + href: greenhorn/index.qmd + - text: feidlambda I + href: greenhorn/index.qmd + # href: greenhorn/feidlambda-2/presentation.qmd + - text: feidlambda II + href: greenhorn/feidlambda-2/index.qmd + - text: feidlambda III + href: greenhorn/index.qmd + # href: release/feidlambda-0-1-0.qmd + - # right: - # - icon: twitter - # href: https://twitter.com - # aria-label: feidlambda twitter + right: + - icon: github + href: https://github.com/fiakoenjiniring/feidlambda sidebar: - id: side-docs @@ -70,6 +82,39 @@ website: contents: - "yoooo" - "aaaa" + + - id: side-feidlambda-2 + style: floating + contents: + - text: Pendahuluan + href: greenhorn/feidlambda-2/index.qmd + - text: Presentasi + href: greenhorn/feidlambda-2/presentation.qmd + - Review + - section: Logical + contents: + - Fungsi Logical + - Operator Logical + - Fungsi IS* + - section: Dynamic Array Formula + contents: + - FILTER, UNIQUE + - RANDARRAY, SEQUENCE + - SORT, SORTBY + - XLOOKUP, XMATCH + - section: Fungsi Baru + contents: + - CONCAT + - IFS, MAXIFS, MINIFS + - SWITCH + - TEXTJOIN + - LET + - section: User Defined Lambda (UDL) + contents: + - Pengenalan LAMBDA + - Menggabungkan LAMBDA dan LET + - Advanced Formula Environment (AFE) + - Berbagi UDL ## SIDEBAR page-footer: @@ -82,9 +127,10 @@ website: format: html: - theme: zephyr # lux, materia, minty, sandstone, spacelab, yeti + theme: minty # lux, materia, minty, sandstone, spacelab, yeti, zephyr css: styles.css toc: true + link-external-newwindow: true diff --git a/docs/glossary.qmd b/docs/glossary.qmd index 85f57c0..59c9096 100644 --- a/docs/glossary.qmd +++ b/docs/glossary.qmd @@ -32,9 +32,9 @@ Angka / numerik. Numerik yang dimaksud adalah bilangan real: $\mathbb{R} = \{-1, Sel. ::: {#fig-glossary-cell .column-page layout-ncol="2" layout-valign="bottom"} -![Cell (Excel)](./img-glossary/cell_excel.png){#fig-cell-excel width=350} +![Cell (Excel)](img-glossary/cell_excel.png){#fig-cell-excel width=350} -![Cell (Ilustrasi)](./img-glossary/cell_ilust.png){#fig-cell-ilust width=350} +![Cell (Ilustrasi)](img-glossary/cell_ilust.png){#fig-cell-ilust width=350} _Cell_ ::: @@ -44,9 +44,9 @@ _Cell_ Rentang yang terdiri dari lebih dari satu sel. ::: {#fig-glossary-range .column-page layout-ncol="2" layout-valign="bottom"} -![Range (Excel)](./img-glossary/range_excel.png){#fig-range-excel width=350} +![Range (Excel)](img-glossary/range_excel.png){#fig-range-excel width=350} -![Range (Ilustrasi)](./img-glossary/range_ilust.png){#fig-range-ilust width=350} +![Range (Ilustrasi)](img-glossary/range_ilust.png){#fig-range-ilust width=350} _Range_ ::: @@ -56,9 +56,9 @@ _Range_ _Range_ yang memiliki 1 dimensi. ::: {#fig-glossary-vector .column-page layout-ncol="2" layout-valign="bottom"} -![Vector (Excel)](./img-glossary/vector_excel.png){#fig-vector-excel width=350} +![Vector (Excel)](img-glossary/vector_excel.png){#fig-vector-excel width=350} -![Vector (Ilustrasi)](./img-glossary/vector_ilust.png){#fig-vector-ilust width=350} +![Vector (Ilustrasi)](img-glossary/vector_ilust.png){#fig-vector-ilust width=350} _Vector_ ::: @@ -68,9 +68,9 @@ _Vector_ _Range_ yang memiliki 2 dimensi. Penggunaan istilah _array_ menginformasikan bahwa _range_ berupa dua dimensi. ::: {#fig-glossary-array .column-page layout-ncol="2" layout-valign="bottom"} -![Array (Excel)](./img-glossary/array_excel.png){#fig-array-excel width=350} +![Array (Excel)](img-glossary/array_excel.png){#fig-array-excel width=350} -![Array (Ilustrasi)](./img-glossary/array_ilust.png){#fig-array-ilust width=350} +![Array (Ilustrasi)](img-glossary/array_ilust.png){#fig-array-ilust width=350} _Array_ ::: @@ -80,9 +80,9 @@ _Array_ _Array_ yang memiliki _header_ dalam format tabel. ::: {#fig-glossary-table .column-page layout-ncol="2" layout-valign="center"} -![Table (Excel)](./img-glossary/table_excel.png){#fig-table-excel width=350} +![Table (Excel)](img-glossary/table_excel.png){#fig-table-excel width=350} -![Table (Ilustrasi)](./img-glossary/table_ilust.png){#fig-table-ilust width=350} +![Table (Ilustrasi)](img-glossary/table_ilust.png){#fig-table-ilust width=350} _Table_ ::: @@ -92,9 +92,9 @@ _Table_ _Vector_ atau _array_ yang berisikan nilai `TRUE` atau `FALSE`. ::: {#fig-glossary-logical-vector .column-page layout-ncol="2" layout-valign="center"} -![Logical Vector (Excel)](./img-glossary/logical-vector_excel.png){#fig-logical-vector-excel width=350} +![Logical Vector (Excel)](img-glossary/logical-vector_excel.png){#fig-logical-vector-excel width=350} -![Logical Vector (Ilustrasi)](./img-glossary/logical-vector_ilust.png){#fig-logical-vector-ilust width=350} +![Logical Vector (Ilustrasi)](img-glossary/logical-vector_ilust.png){#fig-logical-vector-ilust width=350} _Logical Vector_ ::: @@ -104,9 +104,9 @@ _Logical Vector_ _Vector_ atau _array_ yang berisikan nilai _numerik_. ::: {#fig-glossary-numeric-vector .column-page layout-ncol="2" layout-valign="center"} -![Numeric Vector (Excel)](./img-glossary/numeric-vector_excel.png){#fig-numeric-vector-excel width=350} +![Numeric Vector (Excel)](img-glossary/numeric-vector_excel.png){#fig-numeric-vector-excel width=350} -![Numeric Vector (Ilustrasi)](./img-glossary/numeric-vector_ilust.png){#fig-numeric-vector-ilust width=350} +![Numeric Vector (Ilustrasi)](img-glossary/numeric-vector_ilust.png){#fig-numeric-vector-ilust width=350} _Numeric Vector_ ::: @@ -115,34 +115,34 @@ _Numeric Vector_ _Vector_ yang melebar ke samping atau berupa baris. -![Row Vector (Excel)](./img-glossary/row-vector_excel.png){#fig-row-vector-excel width=350} +![Row Vector (Excel)](img-glossary/row-vector_excel.png){#fig-row-vector-excel width=350} ##### _COLUMN VECTOR_ _Vector_ yang memanjang ke bawah atau berupa kolom. -![Column Vector (Excel)](./img-glossary/column-vector_excel.png){#fig-column-vector-excel height=350} +![Column Vector (Excel)](img-glossary/column-vector_excel.png){#fig-column-vector-excel height=350} ##### _DYNAMIC ARRAY_ Larik dinamis adalah kumpulan nilai / sel yang merupakan satu kesatuan. Dapat berupa _vector_ (1D) atau _array_ (2D). ::: {#fig-glossary-dynamic-array-vector .column-screen-inset layout="[[1,1,1]]" layout-valign="bottom"} -![_Column Vector_ Biasa](./img-glossary/dynamic-array_col_nda_excel.png){#fig-dynamic-array-col-nda height=350} +![_Column Vector_ Biasa](img-glossary/dynamic-array_col_nda_excel.png){#fig-dynamic-array-col-nda height=350} -![_Dynamic Array_ pada _Column Vector_](./img-glossary/dynamic-array_col_excel.gif){#fig-dynamic-array-col-gif height=350} +![_Dynamic Array_ pada _Column Vector_](img-glossary/dynamic-array_col_excel.gif){#fig-dynamic-array-col-gif height=350} -![_Column Vector_ (_Dynamic Array_)](./img-glossary/dynamic-array_col_da_excel.png){#fig-dynamic-array-col-da height=350} +![_Column Vector_ (_Dynamic Array_)](img-glossary/dynamic-array_col_da_excel.png){#fig-dynamic-array-col-da height=350} _Dynamic Array_ (_Vector_) ::: ::: {#fig-glossary-dynamic-array-array .column-screen-inset layout="[[1,1,1]]" layout-valign="bottom"} -![_Array_ Biasa](./img-glossary/dynamic-array_array_nda_excel.png){#fig-dynamic-array-col-nda height=350} +![_Array_ Biasa](img-glossary/dynamic-array_array_nda_excel.png){#fig-dynamic-array-col-nda height=350} -![_Dynamic Array_ pada _Array_](./img-glossary/dynamic-array_array_excel.gif){#fig-dynamic-array-col-gif height=350} +![_Dynamic Array_ pada _Array_](img-glossary/dynamic-array_array_excel.gif){#fig-dynamic-array-col-gif height=350} -![_Array_ (_Dynamic Array_)](./img-glossary/dynamic-array_array_da_excel.png){#fig-dynamic-array-col-da height=350} +![_Array_ (_Dynamic Array_)](img-glossary/dynamic-array_array_da_excel.png){#fig-dynamic-array-col-da height=350} _Dynamic Array_ (_Array_) ::: @@ -154,9 +154,9 @@ Formula yang mengeluarkan hasil lebih dari satu sel (_vector_ / _array_) dalam b Persamaan yang termasuk _dynamic array formula_ antara lain: `=POWER()`, `=ABS()`, `=ROUNDUP()`, dll. Yang perlu diingat bahwa formula _dynamic array_ mampu menghasilkan nilai dalam bentuk _vector_ atau _array_ sesuai jenis nilai yang dimasukkan. ::: {#fig-glossary-dynamic-array-formula .column-screen-inset layout="[[40,60]]" layout-valign="bottom"} -![Formula Biasa](./img-glossary/dynamic-array-formula_normal_excel.png){#fig-dynamic-array-formula-normal height=350} +![Formula Biasa](img-glossary/dynamic-array-formula_normal_excel.png){#fig-dynamic-array-formula-normal height=350} -![_Dynamic Array Formula_](./img-glossary/dynamic-array-formula_da_excel.png){#fig-dynamic-array-formula-dynamic height=350} +![_Dynamic Array Formula_](img-glossary/dynamic-array-formula_da_excel.png){#fig-dynamic-array-formula-dynamic height=350} _Dynamic Array Formula_ ::: diff --git a/greenhorn/feidlambda-2/index.qmd b/greenhorn/feidlambda-2/index.qmd new file mode 100644 index 0000000..0a0f56d --- /dev/null +++ b/greenhorn/feidlambda-2/index.qmd @@ -0,0 +1,35 @@ +--- +pagetitle: "feidlambda II: Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA" +title: feidlambda II + +subtitle: | + Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA + +title-block-banner: true +toc: true +format: + html: + link-external-newwindow: true + page-layout: full +sidebar: side-greenhorn + +author: Taruma Sakti Megariansyah +date: 2022-10-25 +# author-title: Penulis +abstract: | + Pada pertemuan kedua, pembelajaran akan fokus untuk mengeksplorasi kegunaan _dynamic array formula_ dan penggunaan fungsi `LAMBDA`. +--- + +Topik Pembahasan: + +- Review _Glossary_ (Daftar Istilah). +- Review _Dynamic Array_ dan _Dynamic Array Formula_. +- Operator & Fungsi Logical: AND (*), OR (+). +- Fungsi `IS*`: `ISBLANK`, `ISERR`, `ISERROR`, `ISEVEN`, `ISFORMULA`, `ISNA`, `ISNONTEXT`, `ISNUMBER`, `ISODD`. +- _Dynamic Array Formula_ (DAF): `FILTER`, `RANDARRAY`, `SEQUENCE`, `SORT`, `SORTBY`, `UNIQUE`, `XLOOKUP`, `XMATCH`. +- Fungsi Baru (2019-2021): + - 2019: `CONCAT`, `IFS`, `MAXIFS`, `MINIFS`, `SWITCH`, `TEXTJOIN`. + - 2021: `LET`. +- _User Defined Lambda_ (UDL) dengan `LAMBDA`. +- Kombinasi `LAMBDA` dan `LET`. +- Berbagi UDL dengan [GitHub Gist](https://gist.github.com) dan _Advanced Formula Environment_ (AFE). diff --git a/greenhorn/feidlambda-2/presentation-speaker.html b/greenhorn/feidlambda-2/presentation-speaker.html new file mode 100644 index 0000000..535d51c --- /dev/null +++ b/greenhorn/feidlambda-2/presentation-speaker.html @@ -0,0 +1,2659 @@ + + + + + + + + + + + + + + + feidlambda - feidlambda II + + + + + + + + + + + + + + + +
+
+ +
+

feidlambda II

+

Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA

+

Taruma Sakti Megariansyah

+

2022-10-25

+
+ +
+

Agenda

+

Agenda untuk feidlambda II: Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA

+
+
    +
  • Review Daftar Istilah & Dynamic Array Formula
  • +
  • Logical
  • +
  • Dynamic Array Formula (DAF)
  • +
  • Fungsi Baru (2019-2021)
  • +
  • User Defined Lambda (UDL) dengan LAMBDA
  • +
+
+
+
+

1 Review

+ +
+ +
+

Daftar Istilah

+ +
+ +
+

2 Logical

+ +
+ +
+
+

Fungsi dan Operator Logical

+ +
+
+

AND

+

Syntax

+
=AND(logical1, [logical2], ...)
+
+
    +
  • Fungsi logika, untuk menentukan apakah semua kondisi dalam sebuah tes adalah TRUE. 1
  • +
  • Menghasilkan nilai TRUE ketika dua (atau lebih) bernilai TRUE. Jika terdapat satu atau lebih nilai FALSE maka menghasilkan nilai FALSE.
  • +
  • Jika input berupa logical vector saja (AND(logical_vector)), maka akan mengevaluasi seluruh elemen pada logical vector (AND(elemen_1, elemen_2, ...)).
  • +
+
+
+
+

Operator AND (*)

+

Syntax

+
=logical_vector1 * logical_vector2
+
+
    +
  • Mengevaluasi AND pada setiap elemen dengan vector/array.
    ={AND(elemen1_vector1, elemen1_vector2, ...), AND(elemen2_vector1, elemen2_vector2, ...), ...}.
  • +
  • Menghasilkan numerical vector yang bernilai 0 (FALSE) atau 1 (TRUE). Contohnya: {1, 0, 1}
  • +
  • Gunakan numerical_vector=1 untuk menghasilkan logical vector ({TRUE, FALSE, TRUE})
  • +
+
+
+
+

OR

+
=OR(logical1, [logical2], ...)
+
+
    +
  • Fungsi logika, untuk menentukan apakah salah satu kondisi dalam sebuah tes adalah TRUE. 1
  • +
  • Menghasilkan nilai TRUE ketika salah satu bernilai TRUE.
  • +
  • Jika input berupa logical vector saja (OR(logical_vector)), maka akan mengevaluasi seluruh elemen pada logical vector (OR(elemen_1, elemen_2, ...)).
  • +
+
+
+
+

Operator OR (+)

+

Syntax

+
=logical_vector1 * logical_vector2
+
+
    +
  • Mengevaluasi OR pada setiap elemen dengan vector/array.
    ={OR(elemen1_vector1, elemen1_vector2, ...), OR(elemen2_vector1, elemen2_vector2, ...), ...}.
  • +
  • Menghasilkan numerical vector yang bernilai 0 (FALSE) atau 1 (TRUE). Contohnya: {1, 0, 1}
  • +
  • Gunakan numerical_vector=1 untuk menghasilkan logical vector ({TRUE, FALSE, TRUE})
  • +
+
+ +
+
+
+

Fungsi IS*

+ +
+
+

Fungsi IS*

+

SYNTAX

+
=IS*(value)
+
+
    +
  • Memeriksa nilai tertentu dan mengembalikan TRUE atau FALSE bergantung pada hasilnya. 1
  • +
  • ISBLANK bernilai TRUE jika sel kosong.
  • +
  • ISNUMBER bernilai TRUE jika sel berisikan angka.
  • +
+
+
+
+

Koleksi Fungsi IS* (1)

+

Periksa nilai error / kosong

+
+
    +
  • ISNA(...): Cek nilai apakah #N/A.
  • +
  • ISERR(...): Cek nilai apakah error selain #N/A (#VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, atau #NULL!).
  • +
  • ISERROR(...): Cek nilai apakah error (seluruh jenis error).
  • +
  • ISBLANK(...): Cek nilai apakah kosong.
  • +
+
+
+
+

Koleksi Fungsi IS* (2)

+

Periksa nilai jenis sel

+
+
    +
  • ISLOGICAL(...): Cek nilai apakah logical (TRUE atau FALSE).
  • +
  • ISNUMBER(...): Cek nilai apakah numeric (\(\mathbb{R}\)).
  • +
  • ISTEXT(...): Cek nilai apakah teks. Dan ISNONTEXT(...): Cek niai apakah bukan teks (number, logical, error)
  • +
  • ISFORMULA(...): Cek nilai apakah formula.
  • +
+
+
+
+

Koleksi Fungsi IS* (3)

+

Periksa nilai angka

+
+
    +
  • ISEVEN(...): Cek nilai apakah bilangan genap.
  • +
  • ISODD(...): Cek nilai apakah bilangan ganjil.
  • +
+
+
+
+
+

3 Dynamic Array Formula (DAF)

+ +
+
+

Menyeleksi/memilih data

+
+
    +
  • FILTER(...): Fungsi FILTER memungkinkan Anda memfilter rentang data berdasarkan kriteria yang ditetapkan. 1
  • +
+
=FILTER(array, include, [if_empty])
+
    +
  • UNIQUE(...): Fungsi UNIQUE menghasilkan daftar nilai yang unik dalam daftar atau rentang. 2
  • +
+
=UNIQUE(array, [by_col], [exactly_once])
+
+
+
+

Membangkitkan data

+
+
    +
  • SEQUENCE(...): Fungsi SEQUENCE memungkinkan Anda menghasilkan daftar angka yang berurutan dalam larik seperti \({1, 2, 3, 4, \dots}\). 1
  • +
+
=SEQUENCE(rows, [columns], [start], [step])
+
    +
  • RANDARRAY(...): Fungsi RANDARRAY menghasilkan larik angka acak. Anda dapat menentukan jumlah baris dan kolom yang akan diisi, nilai minimum dan maksimum, dan apakah fungsi mengembalikan bilangan bulat atau nilai desimal. 2
  • +
+
=RANDARRAY([rows], [columns], [min], [max], [whole_number])
+
+
+
+

Menyusun data

+
+
    +
  • SORT(...): Fungsi SORT mengurutkan konten rentang atau larik. 1
  • +
+
=SORT(array, [sort_index], [sort_order], [by_col])
+
    +
  • SORTBY(...): Fungsi SORTBY mengurutkan konten rentang atau larik berdasarkan nilai dalam rentang atau larik yang terkait. 2
  • +
+
=SORTBY(array, by_array1, [sort_order1], [by_array2], [sort_order2], ...)
+
+
+
+

Mencari data

+
+
    +
  • XLOOKUP(...): Fungsi XLOOKUP mencari rentang atau array, lalu mengembalikan item yang terkait dengan kecocokan pertama yang ditemukannya. Jika tidak ada kecocokan, XLOOKUP dapat mengembalikan kecocokan terdekat (perkiraan). 1
  • +
+
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
+
    +
  • XMATCH(...): Fungsi XMATCH mengembalikan posisi relatif item dalam array atau rentang sel. 2
  • +
+
=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
+
+
+
+

4 Fungsi Baru (2019-2021)

+ +
+ +
+
+

Excel 2019

+ +
+
+

Penggabungan Teks

+
+
    +
  • CONCAT(...): Fungsi CONCAT menggabungkan teks dari beberapa rentang dan/atau string, tetapi tidak menyediakan argumen pemisah atau IgnoreEmpty. 1
  • +
+
=CONCAT(text1, [text2], ...)
+
    +
  • TEXTJOIN(...): Fungsi TEXTJOIN menggabungkan teks dari beberapa rentang dan/atau string, serta menyertakan pemisah yang Anda tentukan antara tiap nilai teks yang akan digabungkan. Jika pemisah adalah string teks kosong, fungsi ini akan secara efektif menggabungkan rentang. 2
  • +
+
=TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...)
+
+
+
+

KOLEKSI IF*

+
+
    +
  • IFS(...): Fungsi IFS memeriksa apakah satu atau beberapa kondisi terpenuhi dan mengembalikan nilai yang sesuai dengan kondisi TRUE pertama. IFS dapat menggantikan beberapa pernyataan IF yang bertumpuk, dan jauh lebih mudah dibaca dengan beberapa kondisi. 1
  • +
+
=IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2], [logical_test3, value_if_true3], ..., value_if_false)
+
    +
  • MINIFS(...) / MAXIFS(...): Fungsi MINIFS mengembalikan nilai minimal di antara sel yang ditentukan oleh kumpulan persyaratan atau kriteria tertentu / Fungsi MAXIFS mengembalikan nilai maksimal di antara sel yang ditentukan oleh kumpulan persyaratan atau kriteria tertentu. 2 3
  • +
+
=[MIN/MAX]IFS([min/max]_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
+
+
+
+

SWITCH

+
    +
  • SWITCH(...): Fungsi SWITCH mengevaluasi satu nilai (disebut ekspresi) terhadap daftar nilai, dan mengembalikan hasil yang terkait dengan nilai cocok pertama. Jika tidak terdapat kecocokan, nilai default opsional mungkin akan dikembalikan. 1
  • +
+
=SWITCH(expression, value1, result1, [default or value2, result2], ..., [default or value3, result3])
+
+
+
+

EXCEL 2021

+ +
+
+

LET

+
    +
  • LET(...): Fungsi LET menetapkan nama ke hasil perhitungan. Ini memungkinkan menyimpan perhitungan menengah, nilai, atau menetapkan nama di dalam rumus. Nama ini hanya berlaku di dalam lingkup LET fungsi. Mirip dengan variabel dalam pemrograman, LET dilakukan melalui Excel rumus asli Anda. 1
  • +
+
=LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name2], ..., calculation)
+
+
+
+

5 User Defined Lambda (UDL) dengan LAMBDA

+ +
+
+

Mengenal LAMBDA dan UDL

+
    +
  • LAMBDA(...): Gunakan fungsi LAMBDA untuk membuat fungsi kustom yang dapat digunakan kembali dan memanggilnya dengan nama yang mudah dikenali. Fungsi baru tersedia di seluruh buku kerja dan disebut seperti fungsi asli Excel. 1
  • +
+
=LAMBDA(parameter1, [parameter2, parameter3, ...], calculation)
+
+
+

LAMBDA dan LET

+
+
    +
  • LAMBDA dan LET biasanya digunakan berbarengan untuk memudahkan pembuatan UDL ataupun membaca/troubleshooting.
  • +
  • LAMBDA berfungsi menerima input dan membungkusnya sebagai fungsi baru di Excel.
  • +
  • LET digunakan untuk melakukan perhitungan/kalkulasi setelah menerima input dari LAMBDA.
  • +
+
+
// Menerima Input dan Fungsi Excel
+=LAMBDA(
+  parameter1, 
+  [parameter2, parameter3, ...],
+  calculation
+)
+
// Menerima Input dan Fungsi Excel
+=LAMBDA(
+  parameter1, 
+  [parameter2, parameter3, ...],
+  // Kalkulasi lebih lanjut menggunakan LET
+  LET(
+    name1, value1,
+    [name2, value2, name3, value3, ...],
+    calculation
+  )
+)
+
+
+

Advanced Formula Environment

+
+
+

Berbagi UDL

+
+
+

Terima Kasih

+

Taruma Sakti Megariansyah, hi@taruma.info

+ + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/greenhorn/feidlambda-2/presentation.qmd b/greenhorn/feidlambda-2/presentation.qmd new file mode 100644 index 0000000..7d83a5e --- /dev/null +++ b/greenhorn/feidlambda-2/presentation.qmd @@ -0,0 +1,609 @@ +--- +title: "feidlambda II" +subtitle: "Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA" +date: 2022-10-25 +author: Taruma Sakti Megariansyah +format: + revealjs: + smaller: false + scrollable: true + slide-tone: false + slide-number: true + preview-links: true + theme: moon + logo: /fiakologo.png + transition: convex + embed-resources: true + # multiplex: true + footer: | + © 2022 Taruma Sakti Megariansyah. CC-BY-NC-SA 4.0. +--- + +## Agenda + +Agenda untuk _feidlambda II: Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA_ + +::: {.incremental} +- Review Daftar Istilah & _Dynamic Array Formula_ +- _Logical_ +- _Dynamic Array Formula_ (DAF) +- Fungsi Baru (2019-2021) +- _User Defined Lambda_ (UDL) dengan `LAMBDA` +::: + +# 1 Review + +# [Daftar Istilah](https://lambda.fiako.engineering/docs/glossary.html) + +# 2 _Logical_ + +# Fungsi dan Operator _Logical_ + +## `AND` {.smaller} + +### Syntax + +```default +=AND(logical1, [logical2], ...) +``` + +::: {.incremental} +- Fungsi logika, untuk menentukan apakah **semua kondisi** dalam sebuah tes adalah `TRUE`. ^[[AND (Fungsi AND)](https://support.microsoft.com/id-id/office/and-fungsi-and-5f19b2e8-e1df-4408-897a-ce285a19e9d9), Microsoft Support.] +- Menghasilkan nilai `TRUE` ketika dua (atau lebih) bernilai `TRUE`. Jika terdapat satu atau lebih nilai `FALSE` maka menghasilkan nilai `FALSE`. +- Jika input berupa _logical vector_ saja (`AND(logical_vector)`), maka akan mengevaluasi seluruh elemen pada _logical vector_ (`AND(elemen_1, elemen_2, ...)`). +::: + +## Operator `AND` (`*`) {.smaller} + +### Syntax + +```default +=logical_vector1 * logical_vector2 +``` + +::: {.incremental} +- Mengevaluasi `AND` pada setiap elemen dengan _vector/array_.
`={AND(elemen1_vector1, elemen1_vector2, ...), AND(elemen2_vector1, elemen2_vector2, ...), ...}`. +- Menghasilkan _numerical vector_ yang bernilai `0` (`FALSE`) atau `1` (`TRUE`). Contohnya: `{1, 0, 1}` +- Gunakan `numerical_vector=1` untuk menghasilkan _logical vector_ (`{TRUE, FALSE, TRUE}`) +::: + +## `OR` + +```default +=OR(logical1, [logical2], ...) +``` + +::: {.incremental} +- Fungsi logika, untuk menentukan apakah **salah satu kondisi** dalam sebuah tes adalah `TRUE`. ^[[`OR` function](https://support.microsoft.com/en-us/office/or-function-7d17ad14-8700-4281-b308-00b131e22af0), Microsoft Support.] +- Menghasilkan nilai `TRUE` ketika salah satu bernilai `TRUE`. +- Jika input berupa _logical vector_ saja (`OR(logical_vector)`), maka akan mengevaluasi seluruh elemen pada _logical vector_ (`OR(elemen_1, elemen_2, ...)`). +::: + +## Operator `OR` (`+`) {.smaller} + +### Syntax + +```default +=logical_vector1 * logical_vector2 +``` + +::: {.incremental} +- Mengevaluasi `OR` pada setiap elemen dengan _vector/array_.
`={OR(elemen1_vector1, elemen1_vector2, ...), OR(elemen2_vector1, elemen2_vector2, ...), ...}`. +- Menghasilkan _numerical vector_ yang bernilai `0` (`FALSE`) atau `1` (`TRUE`). Contohnya: `{1, 0, 1}` +- Gunakan `numerical_vector=1` untuk menghasilkan _logical vector_ (`{TRUE, FALSE, TRUE}`) +::: + + + +# Fungsi `IS*` + +## Fungsi `IS*` + +### SYNTAX + +```default +=IS*(value) +``` + +::: {.incremental} +- Memeriksa nilai tertentu dan mengembalikan `TRUE` atau `FALSE` bergantung pada hasilnya. ^[[Fungsi IS](https://support.microsoft.com/id-id/office/fungsi-is-0f2d7971-6019-40a0-a171-f2d869135665), Microsoft Support.] +- `ISBLANK` bernilai `TRUE` jika sel kosong. +- `ISNUMBER` bernilai `TRUE` jika sel berisikan angka. +::: + +## Koleksi Fungsi `IS*` (1) + +### Periksa nilai error / kosong + +::: {.incremental} +- `ISNA(...)`: Cek nilai apakah `#N/A`. +- `ISERR(...)`: Cek nilai apakah error selain `#N/A` (`#VALUE!`, `#REF!`, `#DIV/0!`, `#NUM!`, `#NAME?`, atau `#NULL!`). +- `ISERROR(...)`: Cek nilai apakah error (seluruh jenis error). +- `ISBLANK(...)`: Cek nilai apakah kosong. +::: + +## Koleksi Fungsi `IS*` (2) + +### Periksa nilai jenis sel + +::: {.incremental} +- `ISLOGICAL(...)`: Cek nilai apakah _logical_ (`TRUE` atau `FALSE`). +- `ISNUMBER(...)`: Cek nilai apakah _numeric_ ($\mathbb{R}$). +- `ISTEXT(...)`: Cek nilai apakah teks. Dan `ISNONTEXT(...)`: Cek niai apakah bukan teks (_number_, _logical_, _error_) +- `ISFORMULA(...)`: Cek nilai apakah formula. +::: + +## Koleksi Fungsi `IS*` (3) + +### Periksa nilai angka + +::: {.incremental} +- `ISEVEN(...)`: Cek nilai apakah bilangan genap. +- `ISODD(...)`: Cek nilai apakah bilangan ganjil. +::: + +# 3 _Dynamic Array Formula_ (DAF) + +## Menyeleksi/memilih data + +::: {.incremental} +- `FILTER(...)`: Fungsi `FILTER` memungkinkan Anda memfilter rentang data berdasarkan kriteria yang ditetapkan. ^[[Fungsi FILTER](https://support.microsoft.com/id-id/office/fungsi-filter-f4f7cb66-82eb-4767-8f7c-4877ad80c759), Microsoft Support.] + +```default +=FILTER(array, include, [if_empty]) +``` + +- `UNIQUE(...)`: Fungsi `UNIQUE` menghasilkan daftar nilai yang unik dalam daftar atau rentang. ^[[Fungsi UNIQUE](https://support.microsoft.com/id-id/office/fungsi-unique-c5ab87fd-30a3-4ce9-9d1a-40204fb85e1e), Microsoft Support.] + +```default +=UNIQUE(array, [by_col], [exactly_once]) +``` +::: + +## Membangkitkan data {.smaller} + +::: {.incremental} +- `SEQUENCE(...)`: Fungsi `SEQUENCE` memungkinkan Anda menghasilkan daftar angka yang berurutan dalam larik seperti ${1, 2, 3, 4, \dots}$. ^[[Fungsi SEQUENCE](https://support.microsoft.com/id-id/office/fungsi-sequence-57467a98-57e0-4817-9f14-2eb78519ca90), Microsoft Support.] + +```default +=SEQUENCE(rows, [columns], [start], [step]) +``` + +- `RANDARRAY(...)`: Fungsi `RANDARRAY` menghasilkan larik angka acak. Anda dapat menentukan jumlah baris dan kolom yang akan diisi, nilai minimum dan maksimum, dan apakah fungsi mengembalikan bilangan bulat atau nilai desimal. ^[[Fungsi RANDARRAY](https://support.microsoft.com/id-id/office/randarray-fungsi-randarray-21261e55-3bec-4885-86a6-8b0a47fd4d33), Microsoft Support.] + +```default +=RANDARRAY([rows], [columns], [min], [max], [whole_number]) +``` +::: + +## Menyusun data + +::: {.incremental} +- `SORT(...)`: Fungsi `SORT` mengurutkan konten rentang atau larik. ^[[Fungsi SORT](https://support.microsoft.com/id-id/office/fungsi-sort-22f63bd0-ccc8-492f-953d-c20e8e44b86c), Microsoft Support.] + +```default +=SORT(array, [sort_index], [sort_order], [by_col]) +``` + +- `SORTBY(...)`: Fungsi `SORTBY` mengurutkan konten rentang atau larik berdasarkan nilai dalam rentang atau larik yang terkait. ^[[Fungsi SORTBY](https://support.microsoft.com/id-id/office/fungsi-sortby-cd2d7a62-1b93-435c-b561-d6a35134f28f), Microsoft Support.] + +```default +=SORTBY(array, by_array1, [sort_order1], [by_array2], [sort_order2], ...) +``` +::: + +## Mencari data {.smaller} + +::: {.incremental} +- `XLOOKUP(...)`: Fungsi `XLOOKUP` mencari rentang atau array, lalu mengembalikan item yang terkait dengan kecocokan pertama yang ditemukannya. Jika tidak ada kecocokan, `XLOOKUP` dapat mengembalikan kecocokan terdekat (perkiraan). ^[[Fungsi XLOOKUP](https://support.microsoft.com/id-id/office/fungsi-xlookup-b7fd680e-6d10-43e6-84f9-88eae8bf5929), Microsoft Support.] + +```default +=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]) +``` + +- `XMATCH(...)`: Fungsi `XMATCH` mengembalikan posisi relatif item dalam array atau rentang sel. ^[[Fungsi XMATCH](https://support.microsoft.com/id-id/office/fungsi-xmatch-d966da31-7a6b-4a13-a1c6-5a33ed6a0312), Microsoft Support.] + +```default +=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode]) +``` +::: + +# 4 Fungsi Baru (2019-2021) + +# Excel 2019 + +## Penggabungan Teks {.smaller} + +::: {.incremental} +- `CONCAT(...)`: Fungsi `CONCAT` menggabungkan teks dari beberapa rentang dan/atau string, tetapi tidak menyediakan argumen pemisah atau IgnoreEmpty. ^[[Fungsi CONCAT](https://support.microsoft.com/id-id/office/concat-fungsi-concat-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2), Microsoft Support.] + +```default +=CONCAT(text1, [text2], ...) +``` + +- `TEXTJOIN(...)`: Fungsi `TEXTJOIN` menggabungkan teks dari beberapa rentang dan/atau string, serta menyertakan pemisah yang Anda tentukan antara tiap nilai teks yang akan digabungkan. Jika pemisah adalah string teks kosong, fungsi ini akan secara efektif menggabungkan rentang. ^[[Fungsi TEXTJOIN](https://support.microsoft.com/id-id/office/textjoin-fungsi-textjoin-357b449a-ec91-49d0-80c3-0e8fc845691c), Microsoft Support.] + +```default +=TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...) +``` +::: + +## KOLEKSI `IF*` {.smaller} + +::: {.incremental} +- `IFS(...)`: Fungsi `IFS` memeriksa apakah satu atau beberapa kondisi terpenuhi dan mengembalikan nilai yang sesuai dengan kondisi `TRUE` pertama. `IFS` dapat menggantikan beberapa pernyataan `IF` yang bertumpuk, dan jauh lebih mudah dibaca dengan beberapa kondisi. ^[[Fungsi IFS](https://support.microsoft.com/id-id/office/ifs-fungsi-ifs-36329a26-37b2-467c-972b-4a39bd951d45), Microsoft Support.] + +```default +=IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2], [logical_test3, value_if_true3], ..., value_if_false) +``` + +- `MINIFS(...)` / `MAXIFS(...)`: Fungsi `MINIFS` mengembalikan nilai minimal di antara sel yang ditentukan oleh kumpulan persyaratan atau kriteria tertentu / Fungsi `MAXIFS` mengembalikan nilai maksimal di antara sel yang ditentukan oleh kumpulan persyaratan atau kriteria tertentu. ^[[Fungsi MINIFS](https://support.microsoft.com/id-id/office/minifs-fungsi-minifs-6ca1ddaa-079b-4e74-80cc-72eef32e6599), Microsoft Support.] ^[[Fungsi MAXIFS](https://support.microsoft.com/id-id/office/maxifs-fungsi-maxifs-dfd611e6-da2c-488a-919b-9b6376b28883), Microsoft Support.] + +```default +=[MIN/MAX]IFS([min/max]_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...) +``` +::: + +## SWITCH + +- `SWITCH(...)`: Fungsi `SWITCH` mengevaluasi satu nilai (disebut ekspresi) terhadap daftar nilai, dan mengembalikan hasil yang terkait dengan nilai cocok pertama. Jika tidak terdapat kecocokan, nilai default opsional mungkin akan dikembalikan. ^[[Fungsi SWITCH](https://support.microsoft.com/id-id/office/switch-fungsi-switch-47ab33c0-28ce-4530-8a45-d532ec4aa25e), Microsoft Support.] + +```default +=SWITCH(expression, value1, result1, [default or value2, result2], ..., [default or value3, result3]) +``` + +# EXCEL 2021 + +## LET + +- `LET(...)`: Fungsi `LET` menetapkan nama ke hasil perhitungan. Ini memungkinkan menyimpan perhitungan menengah, nilai, atau menetapkan nama di dalam rumus. Nama ini hanya berlaku di dalam lingkup `LET` fungsi. Mirip dengan variabel dalam pemrograman, `LET` dilakukan melalui Excel rumus asli Anda. ^[[Fungsi LET](https://support.microsoft.com/id-id/office/fungsi-let-34842dd8-b92b-4d3f-b325-b8b8f9908999), Microsoft Support.] + +```default +=LET(name1, name_value1, calculation_or_name2, [name_value2, calculation_or_name2], ..., calculation) +``` + +# 5 _User Defined Lambda_ (UDL) dengan `LAMBDA` + +## Mengenal LAMBDA dan UDL + +- `LAMBDA(...)`: Gunakan fungsi `LAMBDA` untuk membuat fungsi kustom yang dapat digunakan kembali dan memanggilnya dengan nama yang mudah dikenali. Fungsi baru tersedia di seluruh buku kerja dan disebut seperti fungsi asli Excel. ^[[Fungsi LAMBDA](https://support.microsoft.com/id-id/office/fungsi-lambda-bd212d27-1cd1-4321-a34a-ccbf254b8b67), Microsoft Support.] + +```default +=LAMBDA(parameter1, [parameter2, parameter3, ...], calculation) +``` + +## `LAMBDA` dan `LET` + +::: {.incremental} +- `LAMBDA` dan `LET` biasanya digunakan bersamaan untuk memudahkan pembuatan UDL ataupun membaca/_troubleshooting_. +- `LAMBDA` berfungsi menerima `input` dan membungkusnya sebagai fungsi baru di Excel. +- `LET` digunakan untuk melakukan perhitungan/kalkulasi setelah menerima input dari `LAMBDA`. +::: + +## Menggabungkan `LAMBDA` dan `LET` {auto-animate="true"} + +```r +=LAMBDA(parameter1, [parameter2, parameter3, ...], calculation) +``` + +## Menggabungkan `LAMBDA` dan `LET` {auto-animate="true"} + +```{.r code-line-numbers="1,5|2-3|4"} +=LAMBDA( + parameter1, + [parameter2, parameter3, ...], + calculation +) +``` + +## Menggabungkan `LAMBDA` dan `LET` {auto-animate="true"} + +```{.r code-line-numbers="1-3,9|4-8|2-3|4,8|5-6|7|"} +=LAMBDA( + parameter1, + [parameter2, parameter3, ...], + LET( + name1, value1, + [name2, value2, name3, value3, ...], + calculation + ) +) +``` + +# Contoh `LAMBDA` dan `LET` + +## Contoh `LAMBDA` dan `LET` + +- Mengurangi setiap elemen dari _numeric vector_ ($\mathbf{x}$) dengan setengah dari rata-ratanya ($\frac{\text{mean}(\mathbf{x})}{2}$). +- $\mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2}$ + +## Menentukan _input_ `LAMBDA` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="|2-3"} +=LAMBDA( + parameter1, + [parameter2, parameter3, ...], + calculation +) +``` + +## Menentukan _input_ `LAMBDA` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="2|3"} +=LAMBDA( + vector, + calculation +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="3-7"} +=LAMBDA( + vector, + LET( + name1, value1, + [name2, value2, name3, value3, ...], + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="4"} +=LAMBDA( + vector, + LET( + x, vector, + [name2, value2, name3, value3, ...], + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="4"} +=LAMBDA( + vector, + LET( + ..., ..., + [name2, value2, name3, value3, ...], + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="4"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + [name2, value2, name3, value3, ...], + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="5"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + ..., ..., + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="6"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + y, vector - halfavg, + calculation + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="7-8"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + y, vector - halfavg, + y + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="6"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + vector - halfavg + ) +) +``` + +## Kalkulasi dengan `LET` {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + vector - halfavg + ) +) +``` + +# Pengembangan lebih lanjut + +## Validasi _input_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="2"} +=LAMBDA( + vector, + LET( + avg, AVERAGE(vector), + halfavg, avg/2, + vector - halfavg + ) +) +``` + +## Validasi _input_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="2|4-5"} +=LAMBDA( + vector, + LET( + vector_clean, FILTER(vector, ISNUMBER(vector)), + avg, AVERAGE(vector_clean), + halfavg, avg/2, + vector - halfavg + ) +) +``` + +## _Refactoring_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="5-6"} +=LAMBDA( + vector, + LET( + vector_clean, FILTER(vector, ISNUMBER(vector)), + avg, AVERAGE(vector_clean), + halfavg, avg/2, + vector - halfavg + ) +) +``` + +## _Refactoring_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{2} $$ + +```{.r code-line-numbers="5"} +=LAMBDA( + vector, + LET( + vector_clean, FILTER(vector, ISNUMBER(vector)), + halfavg, AVERAGE(vector_clean) / 2, + vector - halfavg + ) +) +``` + +## _Optional argument/parameter_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{n} $$ + +```{.r code-line-numbers="3|5|7|3,5,7"} +=LAMBDA( + vector, + [n], + LET( + n, IF(ISOMITTED(n), 2, n), + vector_clean, FILTER(vector, ISNUMBER(vector)), + halfavg, AVERAGE(vector_clean) / n, + vector - halfavg + ) +) +``` + +## _Optional argument/parameter_ {auto-animate="true"} + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{n} $$ + +```r +=LAMBDA( + vector, + [n], + LET( + n, IF(ISOMITTED(n), 2, n), + vector_clean, FILTER(vector, ISNUMBER(vector)), + halfavg, AVERAGE(vector_clean) / n, + vector - halfavg + ) +) +``` + +## Penggunaan Formula + +$$ \mathbf{y} \leftarrow \mathbf{x} - \frac{\text{mean}(\mathbf{x})}{n} $$ + +::: {.incremental} +- Formula tersebut disimpan sebagai `HALFAVG` di _Formulas Name Manager_. +- Sintaksnya `=HALFAVG(vector, [n])`. +- `=HALFAVG(D5:D10)` (maka $n=2$). +- `=HALFAVG(D5#, 4)` (maka $n=4$). +::: + +## _Advanced Formula Environment_ (AFE) + +::: {.incremental} +- Excel add-ins yang memudahkan mengatur formula pada lembar kerja. +- Alternatif _Formulas Name Manager_. +- Memiliki fitur _syntax highlighting_ dan _shortcut_ umum untuk _coding_. +- Dapat _import_ UDL hasil dari orang lain. ^[Harus melalui Github Gist.] +::: + +## Berbagi UDL + +::: {.incremental} +- Memiliki [GitHub Account](https://github.com). +- Mengupload kode UDL dari AFE ke [GitHub Gist](https://gist.github.com). +- _Share_ link Gist. +::: + +# Terima Kasih + +Taruma Sakti Megariansyah, [hi@taruma.info](mailto:hi@taruma.info) \ No newline at end of file diff --git a/greenhorn/feidlambda-2/presentation_ex.qmd b/greenhorn/feidlambda-2/presentation_ex.qmd new file mode 100644 index 0000000..8de31b6 --- /dev/null +++ b/greenhorn/feidlambda-2/presentation_ex.qmd @@ -0,0 +1,521 @@ +--- +title: "Quarto Presentations" +subtitle: "Create beautiful interactive slide decks with Reveal.js" +format: + revealjs: + slide-number: true + chalkboard: + buttons: false + preview-links: auto + logo: images/quarto.png + css: styles.css + footer: +--- + +## Hello, There + +This presentation will show you examples of what you can do with Quarto and [Reveal.js](https://revealjs.com), including: + +- Presenting code and LaTeX equations +- Including computations in slide output +- Image, video, and iframe backgrounds +- Fancy transitions and animations +- Printing to PDF + +...and much more + +## Pretty Code {auto-animate="true"} + +- Over 20 syntax highlighting themes available +- Default theme optimized for accessibility + +``` r +# Define a server for the Shiny app +function(input, output) { + + # Fill in the spot we created for a plot + output$phonePlot <- renderPlot({ + # Render a barplot + }) +} +``` + +::: footer +Learn more: [Syntax Highlighting](https://quarto.org/docs/output-formats/html-code.html#highlighting) +::: + +## Code Animations {auto-animate="true"} + +- Over 20 syntax highlighting themes available +- Default theme optimized for accessibility + +``` r +# Define a server for the Shiny app +function(input, output) { + + # Fill in the spot we created for a plot + output$phonePlot <- renderPlot({ + # Render a barplot + barplot(WorldPhones[,input$region]*1000, + main=input$region, + ylab="Number of Telephones", + xlab="Year") + }) +} +``` + +::: footer +Learn more: [Code Animations](https://quarto.org/docs/presentations/revealjs/advanced.html#code-animations) +::: + +## Line Highlighting + +- Highlight specific lines for emphasis +- Incrementally highlight additional lines + +``` {.python code-line-numbers="4-5|7|10"} +import numpy as np +import matplotlib.pyplot as plt + +r = np.arange(0, 2, 0.01) +theta = 2 * np.pi * r +fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) +ax.plot(theta, r) +ax.set_rticks([0.5, 1, 1.5, 2]) +ax.grid(True) +plt.show() +``` + +::: footer +Learn more: [Line Highlighting](https://quarto.org/docs/presentations/revealjs/#line-highlighting) +::: + +## Executable Code + +```r +#| echo: true +#| fig-width: 10 +#| fig-height: 4.5 +library(ggplot2) +ggplot(mtcars, aes(hp, mpg, color = am)) + + geom_point() + + geom_smooth(formula = y ~ x, method = "loess") +``` + +::: footer +Learn more: [Executable Code](https://quarto.org/docs/presentations/revealjs/#executable-code) +::: + +## LaTeX Equations + +[MathJax](https://www.mathjax.org/) rendering of equations to HTML + +::: columns +::: {.column width="40%"} +``` tex +\begin{gather*} +a_1=b_1+c_1\\ +a_2=b_2+c_2-d_2+e_2 +\end{gather*} + +\begin{align} +a_{11}& =b_{11}& + a_{12}& =b_{12}\\ +a_{21}& =b_{21}& + a_{22}& =b_{22}+c_{22} +\end{align} +``` +::: + +::: {.column width="60%"} +```{=tex} +\begin{gather*} +a_1=b_1+c_1\\ +a_2=b_2+c_2-d_2+e_2 +\end{gather*} +``` +```{=tex} +\begin{align} +a_{11}& =b_{11}& + a_{12}& =b_{12}\\ +a_{21}& =b_{21}& + a_{22}& =b_{22}+c_{22} +\end{align} +``` +::: +::: + +::: footer +Learn more: [LaTeX Equations](https://quarto.org/docs/authoring/markdown-basics.html#equations) +::: + +## Column Layout {.smaller} + +Arrange content into columns of varying widths: + +::: columns +::: {.column width="35%"} +#### Motor Trend Car Road Tests + +The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles. +::: + +::: {.column width="3%"} +::: + +::: {.column width="62%"} +```r +knitr::kable(head(mtcars)[,c("mpg", "cyl", "disp", "hp", "wt")]) +``` +::: +::: + +::: footer +Learn more: [Multiple Columns](https://quarto.org/docs/presentations/revealjs/#multiple-columns) +::: + +## Incremental Lists + +Lists can optionally be displayed incrementally: + +::: incremental +- First item +- Second item +- Third item +::: + +. . . + +
Insert pauses to make other types of content display incrementally. + +::: footer +Learn more: [Incremental Lists](https://quarto.org/docs/presentations/revealjs/#incremental-lists) +::: + +## Fragments + +Incremental text display and animation with fragments: + +
+ +::: {.fragment .fade-in} +Fade in +::: + +::: {.fragment .fade-up} +Slide up while fading in +::: + +::: {.fragment .fade-left} +Slide left while fading in +::: + +::: {.fragment .fade-in-then-semi-out} +Fade in then semi out +::: + +. . . + +::: {.fragment .strike} +Strike +::: + +::: {.fragment .highlight-red} +Highlight red +::: + +::: footer +Learn more: [Fragments](https://quarto.org/docs/presentations/revealjs/advanced.html#fragments) +::: + +## Slide Backgrounds {background="#43464B"} + +Set the `background` attribute on a slide to change the background color (all CSS color formats are supported). + +Different background transitions are available via the `background-transition` option. + +::: footer +Learn more: [Slide Backgrounds](https://quarto.org/docs/presentations/revealjs/#color-backgrounds) +::: + +## Media Backgrounds {background="#43464B" background-image="images/milky-way.jpeg"} + +You can also use the following as a slide background: + +- An image: `background-image` + +- A video: `background-video` + +- An iframe: `background-iframe` + +::: footer +Learn more: [Media Backgrounds](https://quarto.org/docs/presentations/revealjs/#image-backgrounds) +::: + +## Absolute Position + +Position images or other elements at precise locations + +![](mini/images/kitten-400-350.jpeg){.absolute top="170" left="30" width="400" height="400"} + +![](mini/images/kitten-450-250.jpeg){.absolute .fragment top="150" right="80" width="450"} + +![](mini/images/kitten-300-200.jpeg){.absolute .fragment bottom="110" right="130" width="300"} + +::: footer +Learn more: [Absolute Position](https://quarto.org/docs/presentations/revealjs/advanced.html#absolute-position) +::: + +## Auto-Animate {auto-animate="true" auto-animate-easing="ease-in-out"} + +Automatically animate matching elements across slides with Auto-Animate. + +::: r-hstack +::: {data-id="box1" auto-animate-delay="0" style="background: #2780e3; width: 200px; height: 150px; margin: 10px;"} +::: + +::: {data-id="box2" auto-animate-delay="0.1" style="background: #3fb618; width: 200px; height: 150px; margin: 10px;"} +::: + +::: {data-id="box3" auto-animate-delay="0.2" style="background: #e83e8c; width: 200px; height: 150px; margin: 10px;"} +::: +::: + +::: footer +Learn more: [Auto-Animate](https://quarto.org/docs/presentations/revealjs/advanced.html#auto-animate) +::: + +## Auto-Animate {auto-animate="true" auto-animate-easing="ease-in-out"} + +Automatically animate matching elements across slides with Auto-Animate. + +::: r-stack +::: {data-id="box1" style="background: #2780e3; width: 350px; height: 350px; border-radius: 200px;"} +::: + +::: {data-id="box2" style="background: #3fb618; width: 250px; height: 250px; border-radius: 200px;"} +::: + +::: {data-id="box3" style="background: #e83e8c; width: 150px; height: 150px; border-radius: 200px;"} +::: +::: + +::: footer +Learn more: [Auto-Animate](https://quarto.org/docs/presentations/revealjs/advanced.html#auto-animate) +::: + +## Slide Transitions {.smaller} + +The next few slides will transition using the `slide` transition + +| Transition | Description | +|------------|------------------------------------------------------------------------| +| `none` | No transition (default, switch instantly) | +| `fade` | Cross fade | +| `slide` | Slide horizontally | +| `convex` | Slide at a convex angle | +| `concave` | Slide at a concave angle | +| `zoom` | Scale the incoming slide so it grows in from the center of the screen. | + +::: footer +Learn more: [Slide Transitions](https://quarto.org/docs/presentations/revealjs/advanced.html#slide-transitions) +::: + +## Tabsets {.smaller .scrollable transition="slide"} + +::: panel-tabset +### Plot + +```r +library(ggplot2) +ggplot(mtcars, aes(hp, mpg, color = am)) + + geom_point() + + geom_smooth(formula = y ~ x, method = "loess") +``` + +### Data + +```r +knitr::kable(mtcars) +``` +::: + +::: footer +Learn more: [Tabsets](https://quarto.org/docs/presentations/revealjs/#tabsets) +::: + +## Interactive Slides {.smaller transition="slide"} + +Include Jupyter widgets and htmlwidgets in your presentations + +```r +#| echo: false +#| fig-height: 5 +library(leaflet) +leaflet() %>% + addTiles() %>% # Add default OpenStreetMap map tiles + addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R") +``` + +::: footer +Learn more: [Jupyter widgets](https://quarto.org/docs/interactive/widgets/jupyter.html), [htmlwidgets](https://quarto.org/docs/interactive/widgets/htmlwidgets.html) +::: + +## Interactive Slides {.smaller transition="slide"} + +Turn presentations into applications with Observable and Shiny. Use component layout to position inputs and outputs. + +```r +ojs_define(actors = data.frame( + x = rnorm(100), + y = rnorm(100) +)) +``` + +```ojs +//| panel: sidebar +viewof talentWeight = Inputs.range([-2, 2], { value: 0.7, step: 0.01, label: "talent weight" }) +viewof looksWeight = Inputs.range([-2, 2], { value: 0.7, step: 0.01, label: "looks weight" }) +viewof minimum = Inputs.range([-2, 2], { value: 1, step: 0.01, label: "min fame" }) +``` + +```ojs +//| panel: fill +import { plotActors } from './actors.js'; +plotActors(actors, talentWeight, looksWeight, minimum) +``` + +::: footer +Learn more: [Observable](https://quarto.org/docs/interactive/ojs/), [Shiny](https://quarto.org/docs/interactive/shiny/), [Component Layout](https://quarto.org/docs/interactive/layout.html) +::: + +## Preview Links + +Navigate to hyperlinks without disrupting the flow of your presentation. + +Use the `preview-links` option to open links in an iframe on top of your slides. Try clicking the link below for a demonstration: + +::: {style="text-align: center; margin-top: 1em"} +[Matplotlib: Visualization with Python](https://matplotlib.org/){preview-link="true" style="text-align: center"} +::: + +::: footer +Learn more: [Preview Links](https://quarto.org/docs/presentations/revealjs/presenting.html#preview-links) +::: + +## Themes + +10 Built-in Themes (or [create your own](https://quarto.org/docs/presentations/revealjs/themes.html#creating-themes)) + +::: {layout-ncol="2"} +![](images/moon.png) + +![](images/sky.png) +::: + +::: footer +Learn more: [Themes](https://quarto.org/docs/presentations/revealjs/themes.html) +::: + +## Easy Navigation + +::: {style="margin-bottom: 0.9em;"} +Quickly jump to other parts of your presentation +::: + +::: {layout="[1, 20]"} +![](images/presentation-menu.png){width="41"} + +Toggle the slide menu with the menu button (bottom left of slide) to go to other slides and access presentation tools. +::: + +You can also press `m` to toggle the menu open and closed. + +::: footer +Learn more: [Navigation](https://quarto.org/docs/presentations/revealjs/presenting.html#navigation-menu) +::: + +## Chalkboard {chalkboard-buttons="true"} + +::: {style="margin-bottom: 0.9em;"} +Free form drawing and slide annotations +::: + +::: {layout="[1, 20]"} +![](images/presentation-chalkboard.png){width="41"} + +Use the chalkboard button at the bottom left of the slide to toggle the chalkboard. +::: + +::: {layout="[1, 20]"} +![](images/presentation-notes-canvas.png){width="41"} + +Use the notes canvas button at the bottom left of the slide to toggle drawing on top of the current slide. +::: + +You can also press `b` to toggle the chalkboard or `c` to toggle the notes canvas. + +::: footer +Learn more: [Chalkboard](https://quarto.org/docs/presentations/revealjs/presenting.html#chalkboard) +::: + +## Point of View + +Press `o` to toggle overview mode: + +![](images/overview-mode.png){.border} + +Hold down the `Alt` key (or `Ctrl` in Linux) and click on any element to zoom towards it---try it now on this slide. + +::: footer +Learn more: [Overview Mode](https://quarto.org/docs/presentations/revealjs/presenting.html#overview-mode), [Slide Zoom](https://quarto.org/docs/presentations/revealjs/presenting.html#slide-zoom) +::: + +## Speaker View + +Press `s` (or use the presentation menu) to open speaker view + +![](images/speaker-view.png){fig-align="center" style="border: 3px solid #dee2e6;" width="780"} + +::: footer +Learn more: [Speaker View](https://quarto.org/docs/presentations/revealjs/presenting.html#speaker-view) +::: + +## Authoring Tools {.smaller} + +Live side-by-side preview for any notebook or text editor including Jupyter and VS Code + +::: columns +::: {.column width="50%"} +![](images/jupyter-edit.png){.border .border-thick} +::: + +::: {.column width="50%"} +![](images/jupyter-preview.png){.border .border-thick} +::: +::: + +::: footer +Learn more: [Jupyter](https://quarto.org/docs/tools/jupyter-lab.html), [VS Code](https://quarto.org/docs/tools/vscode.html), [Text Editors](https://quarto.org/docs/tools/text-editors.html) +::: + +## Authoring Tools {.smaller} + +RStudio includes an integrated presentation preview pane + +![](images/rstudio.png){.border width="900"} + +::: footer +Learn more: [RStudio](https://quarto.org/docs/tools/rstudio.html) +::: + +## And More... + +- [Touch](https://quarto.org/docs/presentations/revealjs/advanced.html#touch-navigation) optimized (presentations look great on mobile, swipe to navigate slides) +- [Footer & Logo](https://quarto.org/docs/presentations/revealjs/#footer-logo) (optionally specify custom footer per-slide) +- [Auto-Slide](https://quarto.org/docs/presentations/revealjs/presenting.html#auto-slide) (step through slides automatically, without any user input) +- [Multiplex](https://quarto.org/docs/presentations/revealjs/presenting.html#multiplex) (allows your audience to follow the slides of the presentation you are controlling on their own phone, tablet or laptop). + +::: footer +Learn more: [Quarto Presentations](https://quarto.org/docs/presentations/revealjs/) +::: \ No newline at end of file diff --git a/greenhorn/index.qmd b/greenhorn/index.qmd new file mode 100644 index 0000000..5902c91 --- /dev/null +++ b/greenhorn/index.qmd @@ -0,0 +1,27 @@ +--- +pagetitle: "Greenhorn feidlambda by fiakodev" +# title: Home +toc: false +format: html +html-math-method: mathjax +link-external-newwindow: true +page-layout: full +sidebar: false +--- + +::: {.text-center .m-0} +# Greenhorn $\text{fe}\hat{i}\text{d} \textbf{l} \lambda \text{m} \textsf{b} \texttt{d} \bigtriangleup$ by **fiako**dev +::: + +::: {.text-center .callout-important appearance="simple" icon="false"} +## Dalam Pengembangan dan Pelatihan +Pelatihan ini masih dalam tahap pengembangan dan pelaksanaan. Seluruh materi yang disinggung akan dicatat di bagian greenhorn ini. +::: + +::: {.text-center .fs-4} +**feidlambda I** (WIP)
Introduction to Dynamic Array + +[**feidlambda II** (WIP)
Exploring Dynamic Array + User Defined Lambda (UDL) with LAMBDA](/greenhorn/feidlambda-2/index.qmd) + +**feidlambda III** (WIP)
Advanced Dynamic Array + Best Practices UDF +::: \ No newline at end of file diff --git a/release/feidlambda-0-1-0.qmd b/release/feidlambda-0-1-0.qmd index e80d439..47f3ec4 100644 --- a/release/feidlambda-0-1-0.qmd +++ b/release/feidlambda-0-1-0.qmd @@ -45,7 +45,7 @@ Jika `num_repeat` tidak diisi, maka secara _default_ bernilai 2. ``` ::: -![`feid.utils.REPEATCOLS`](./img-0-1-0/demo-feidlambda-0-1-repeatcols.gif) +![`feid.utils.REPEATCOLS`](img-0-1-0/demo-feidlambda-0-1-repeatcols.gif) ## SORTCOLS @@ -68,7 +68,7 @@ Jika _input_ `table` sebagai `array`, maka pastikan memisahkan antara `table_hea ``` ::: -![`feid.utils.SORTCOLS`](./img-0-1-0/demo-feidlambda-0-1-sortcols.gif) +![`feid.utils.SORTCOLS`](img-0-1-0/demo-feidlambda-0-1-sortcols.gif) ## REPEATROWS @@ -91,7 +91,7 @@ Jika `num_repeat` tidak diisi, maka secara _default_ bernilai 2. ``` ::: -![`feid.utils.REPEATROWS`](./img-0-1-0/demo-feidlambda-0-1-repeatrows.gif) +![`feid.utils.REPEATROWS`](img-0-1-0/demo-feidlambda-0-1-repeatrows.gif) ## RESHAPECOLS @@ -114,7 +114,7 @@ Jika `nsplit` tidak diisi, maka _default_ bernilai 2. ``` ::: -![`feid.utils.RESHAPECOLS`](./img-0-1-0/demo-feidlambda-0-1-reshapecols.gif) +![`feid.utils.RESHAPECOLS`](img-0-1-0/demo-feidlambda-0-1-reshapecols.gif) ## FINDINDEX2D @@ -133,4 +133,4 @@ _return_ ``` ::: -![`feid.utils.FINDINDEX2D`](./img-0-1-0/demo-feidlambda-0-1-findindex2d.gif) +![`feid.utils.FINDINDEX2D`](img-0-1-0/demo-feidlambda-0-1-findindex2d.gif) diff --git a/release/feidlambda-0-2-0.qmd b/release/feidlambda-0-2-0.qmd index 7c0a9dc..7e350bc 100644 --- a/release/feidlambda-0-2-0.qmd +++ b/release/feidlambda-0-2-0.qmd @@ -42,7 +42,7 @@ _return_ ``` ::: -![`feid.utils.COMPAREVECTOR`](./img-0-2-0/feidlambda-v0-2-comparevector.gif) +![`feid.utils.COMPAREVECTOR`](img-0-2-0/feidlambda-v0-2-comparevector.gif) ## MULTICHECK @@ -65,7 +65,7 @@ _return_ ``` ::: -![`feid.utils.MULTICHECK`](./img-0-2-0/feidlambda-v0-2-multicheck.gif) +![`feid.utils.MULTICHECK`](img-0-2-0/feidlambda-v0-2-multicheck.gif) ## DROPROWS @@ -84,7 +84,7 @@ _return_ ``` ::: -![`feid.utils.DROPROWS`](./img-0-2-0/feidlambda-v0-2-droprows.gif) +![`feid.utils.DROPROWS`](img-0-2-0/feidlambda-v0-2-droprows.gif) ## DROPCOLS @@ -103,7 +103,7 @@ _return_ ``` ::: -![`feid.utils.DROPCOLS`](./img-0-2-0/feidlambda-v0-2-dropcols.gif) +![`feid.utils.DROPCOLS`](img-0-2-0/feidlambda-v0-2-dropcols.gif) ## COUNTMULTICHECK @@ -125,5 +125,5 @@ _return_ ``` ::: -![`feid.utils.COUNTMULTICHECK`](./img-0-2-0/feidlambda-v0-2-countmulticheck.gif) +![`feid.utils.COUNTMULTICHECK`](img-0-2-0/feidlambda-v0-2-countmulticheck.gif)