> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Formula persiapan data

> Pelajari fitur persiapan data platform low-code YiDA — pemrosesan ETL untuk membersihkan, mengintegrasikan, dan mentransformasi data, serta cara mengonfigurasi formula logis dan pemrosesan teks.

## 1. Kasus penggunaan

**Persiapan data** adalah fitur inti platform low-code YiDA. Fitur ini membantu pengguna perusahaan membersihkan, mengintegrasikan, dan mentransformasi data mentah sebelum melakukan analisis atau membangun aplikasi. Persiapan data menerapkan pendekatan ETL (Extraction Transformation Loading) tanpa kode untuk memproses data dari aplikasi YiDA, database perusahaan eksternal, data berbasis file, dan sumber data resmi DingTalk (termasuk Daftar Karyawan, OA, Smart HR, dan Kehadiran). Dengan membangun pipeline pemrosesan data, fitur ini mengonsolidasikan data yang tersebar menjadi dataset terstandar yang mendukung analisis visual dan pengambilan keputusan berbasis data.

## 3. Entri konfigurasi formula

**Jalur: Pengaturan aplikasi > Data Factory > Persiapan Data > Buat persiapan data > Pilih dataset. Formula dapat dikonfigurasi pada node asosiasi, agregasi, dan pembersihan.**

Tonton video di bawah untuk instruksi pengaturan:

## 4. Pemrosesan logis

### CASEWHEN

**Penggunaan 1**: CASEWHEN(\<kondisi>,\<nilai>,\<kondisi>,\<nilai>...). Setara dengan sintaks CASE WHEN pada SQL.

**Contoh**: CASEWHEN(\<Bidang Jenis Kelamin>="Laki-laki","male",\<Bidang Jenis Kelamin>="Perempuan","female"). Nilai "Laki-laki" diganti menjadi "male", dan nilai "Perempuan" diganti menjadi "female".

**Penggunaan 2**: CASEWHEN(\<kondisi>,\<nilai>,\<kondisi>,\<nilai>...\<nilai>). Setara dengan sintaks CASE WHEN pada SQL.

**Contoh**: CASEWHEN(\<Bidang Jenis Kelamin>="Laki-laki","male","female"). Nilai "Laki-laki" diganti menjadi "male", dan nilai lainnya diganti menjadi "female".

## 5. Pemrosesan teks

### LEN

**Penggunaan**: LEN(\[bidang string]). Mengembalikan panjang string.

**Contoh**: LEN("test") mengembalikan 4. LEN("测试") mengembalikan 2. Satu karakter Tionghoa dihitung sebagai satu karakter Inggris.

### LEFT

**Penggunaan**: LEFT(\<bidang measure>,\< n >). Mengembalikan string sepanjang n karakter mulai dari karakter pertama di sebelah kiri nilai \<bidang>.

**Contoh**: LEFT(Field1,3) mengembalikan "ABC" ketika nilai Field1 adalah "ABCDEF".

### RIGHT

**Penggunaan:** RIGHT(\<bidang measure>,\< n >). Mengembalikan string sepanjang n karakter dihitung dari sebelah kanan nilai \<bidang>.

**Contoh**: RIGHT(Field1,3) mengembalikan "DEF" ketika nilai Field1 adalah "ABCDEF".

### MID

**Penggunaan**: MID(\<bidang measure>, \< start >, \< n >). Mengembalikan string sepanjang n karakter mulai dari karakter ke-start (dihitung dari kiri) pada nilai \<bidang>.

**Contoh**: MID(Field1, 3, 3) mengembalikan "CDE" ketika nilai Field1 adalah "ABCDEF".

### POS

**Penggunaan**: POS(\<bidang measure>,\<substring>). Mengembalikan posisi \<substring> di dalam \<teks>. Mengembalikan 0 jika tidak ditemukan kecocokan.

**Contoh**: POS(Field1,"DE") mengembalikan 4 ketika nilai Field1 adalah "ABCDEF".

### UPPER

**Penggunaan**: UPPER(\<bidang measure>). Mengonversi nilai \<bidang> menjadi huruf besar.

**Contoh**: UPPER(Field1) mengembalikan "ABCDEF" ketika nilai Field1 adalah "AbcdeF".

### LOWER

**Penggunaan**: LOWER(\<bidang measure>). Mengonversi nilai \<bidang> menjadi huruf kecil.

**Contoh**: LOWER(Field1) mengembalikan "abcdef" ketika nilai Field1 adalah "AbcdeF".

### VAL

**Penggunaan**: VAL(\<bidang measure>). Mengonversi nilai \<bidang> bertipe teks menjadi tipe numerik.

**Contoh**: VAL(Field1) mengembalikan 123 ketika nilai Field1 adalah "123".

### LEFTTRIM

**Penggunaan**: LEFTTRIM(\<bidang measure>). Menghapus spasi di awal nilai \<bidang>.

**Contoh**: LEFTTRIM(Field1) mengembalikan "ABC" ketika nilai Field1 adalah " ABC".

### RIGHTTRIM

**Penggunaan**: RIGHTTRIM(\<bidang measure>). Menghapus spasi di akhir nilai \<bidang>.

**Contoh**: RIGHTTRIM(Field1) mengembalikan "ABC" ketika nilai Field1 adalah "ABC ".

### NUMBERTOSTRING

**Penggunaan**: NUMBERTOSTRING(\<angka>). Mengonversi data numerik menjadi string.

**Contoh**: NUMBERTOSTRING(Field1) mengembalikan "12345" ketika nilai Field1 adalah "12345 ".

### SPLITPART

**Penggunaan**: SPLITPART(\<bidang string>, delimiter, posisi substring). Memecah string menjadi N substring berdasarkan delimiter (N sama dengan jumlah delimiter ditambah 1). Posisi substring dihitung dari 1 (kiri ke kanan) atau dari -1 (kanan ke kiri).

**Contoh**: SPLITPART(\<Field1>,A,2) mengembalikan "BCD" ketika nilai Field1 adalah "ABCDABHABC". Menetapkan posisi substring ke -5 juga mengembalikan "BCD".

### CONCAT

**Penggunaan**: CONCAT(\<bidang>,\<bidang>,...). Menggabungkan beberapa bidang menjadi satu string. Parameter input harus berupa bidang bertipe string.

**Contoh**: CONCAT(\<Field1>,\<Field2>) mengembalikan "ABCD" ketika nilai Field1 adalah "A" dan nilai Field2 adalah "BCD".

### REPLACE

**Penggunaan**: REPLACE(\[string], \[string yang dicari], \[string pengganti]). Mengembalikan string setelah penggantian.

**Contoh**: REPLACE(\[Field1], \[Field2], \[Field3]) mengembalikan "a12345efg" ketika Field1 adalah "abcdefg", Field2 adalah "bcd", dan Field3 adalah "12345".

## 6. Pemrosesan waktu

### NOW

**Penggunaan**: NOW(). Mengembalikan waktu saat ini, akurat hingga detik.

**Contoh**: T/A

### DATEFORMAT

**Penggunaan**: DATEFORMAT(\<Bidang tanggal>,\<format waktu>). Memformat tanggal menjadi string.

Format untuk kedua fungsi mengikuti konvensi pemformatan tanggal Java. Tipe format yang didukung:

* yyyy: Tahun
* MM: Bulan
* dd: Hari
* hh: Format 12 jam (1-12)
* HH: Format 24 jam (0-23)
* mm: Menit
* ss: Detik

**Contoh 1:**

DATEFORMAT(\<Bidang tanggal>,"yyyy-MM-dd"). Jika nilai bidang tanggal adalah 4 Agustus 1989, nilai yang dikembalikan adalah 1989-08-04. Pemisah "-" dapat diganti dengan "/" atau karakter lain.

**Contoh 2:**

DATEFORMAT(\<Bidang tanggal>,"yyyy-MM-dd HH:mm:ss"). Jika nilai bidang tanggal adalah 1 September 2020, 13.30.00, nilai yang dikembalikan adalah 2020-09-01 13:30:00. Pemisah "-" dan ":" dapat diganti dengan "/" atau dengan karakter seperti "tahun", "bulan", "hari".

### DATEADD

**Penggunaan:** `DATEADD(<Bidang Waktu>,<offset>,<granularitas waktu>)`. Menambahkan \<offset> dengan **\<granularitas waktu>** yang ditentukan ke \<Bidang Waktu>.

* Nilai granularitas waktu:

* Offset adalah angka tertentu yang ditambahkan atau dikurangi. Nilai positif menambah, dan nilai negatif mengurangi.

**Contoh 1:**

Jika nilai Komponen Tanggal adalah "20200901", maka `DATEADD(Komponen Tanggal,10,"DAY") = 20200911`.

**Contoh 2:**

Jika nilai Komponen Tanggal adalah "20200901", maka `DATEADD(Komponen Tanggal,-1,"DAY") = 20200831`.

<Note>
  Format tampilan tanggal default adalah `yyyyMMdd`. Untuk mengubah format tampilan, lihat contoh pada [**fungsi DATEFORMAT**](/id/yida/form/sk0p7euqper7qr7l).
</Note>

### DATEDIFF

**Penggunaan**: DATEDIFF(\<Bidang Waktu 1>,\<Bidang Waktu 2>,\<granularitas waktu>). Mengembalikan selisih antara Bidang Waktu 1 dan Bidang Waktu 2 pada granularitas waktu yang ditentukan.

Opsi granularitas waktu:

* YEAR       Tahun
* MONTH    Bulan
* DAY        Hari
* HOUR      Jam
* MINUTE   Menit
* SECOND  Detik

**Contoh**: DATEDIFF(Komponen Tanggal 1, Komponen Tanggal 2,"DAY") mengembalikan jumlah hari antara dua komponen tanggal.

**Catatan: Parameter hanya mendukung komponen tanggal. Nilai tanggal tetap tidak dapat dimasukkan langsung dalam formula.**

Misalkan nilai Komponen Tanggal adalah "2020-02-14" dan hari ini adalah "2020-02-16". Maka:

DATEDIFF(NOW(), Tanggal yang dimasukkan,"DAY") = 2

DATEDIFF(Tanggal yang dimasukkan, NOW(),"DAY") = -2

### FROMUNIXTIME

**Penggunaan**: Mengonversi nilai waktu Unix numerik menjadi nilai tanggal.

Deklarasi fungsi:

```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
datetime fromunixtime(bigint unixtime)
```

Deskripsi parameter:

* unixtime: Tipe Bigint. Jumlah detik dalam format Unix date-time. Nilai bertipe string, double, atau decimal dikonversi secara implisit menjadi bigint sebelum operasi.
* Nilai kembalian: Tipe Datetime. Mengembalikan NULL jika unixtime adalah NULL.

Contoh:

```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
fromunixtime(123456789) = 1973-11-30 05:33:09
```

### WEEK

**Penggunaan**: WEEK(\[tanggal], \[hari mulai (opsional)]). Menghitung minggu ke berapa dalam setahun untuk tanggal yang diberikan. Jika hari mulai tidak ditentukan, Senin digunakan sebagai hari pertama minggu secara default. Nilai hari mulai 1-7 menunjukkan Senin hingga Minggu sebagai hari pertama minggu.

**Contoh**: WEEK(\[tanggal],) mengembalikan "20202" ketika nilai bidang adalah "2020-01-08". Hari mulai dapat dihilangkan dan default-nya kosong.

### QUARTER

**Penggunaan**: QUARTER(\[tanggal], \[tanda tahun fiskal (opsional)]). Menghitung kuartal dalam setahun untuk tanggal yang diberikan. Tetapkan tanda tahun fiskal ke 1 untuk menggunakan tahun fiskal (dimulai dari April) atau 0 untuk menggunakan tahun kalender.

**Contoh**: QUARTER(\[Field1], 0) mengembalikan "1" ketika nilai Field1 adalah "2020-02-02".

## 7. Statistik dasar

### ROUND

**Penggunaan**: ROUND(\<bidang>,\<presisi>). Membulatkan bidang ke jumlah tempat desimal yang ditentukan.

**Contoh**: ROUND(\<Field1>,\<presisi>) mengembalikan "12,33" ketika nilai Field1 adalah "12,33333" dan presisinya adalah 2.

### MOD

**Penggunaan**: MOD(\<bidang>,\<bidang>). Melakukan operasi modulo dan mengembalikan sisa.

Catatan: Untuk mendapatkan hasil bagi dari pembagian, gunakan operator aritmetika /. Misalnya, 6/4 mengembalikan hasil bagi 1 dengan sisa 2.

Contoh: MOD(\<Field1>,\<Field2>) mengembalikan "2" ketika nilai Field1 adalah "6" dan nilai Field2 adalah "4".

### ParseDouble

**Penggunaan**: ParseDouble(\<bidang>). Mengonversi string atau integer menjadi angka floating-point.

**Contoh**: ParseDouble(\<bidang>) mengembalikan 3.0 ketika nilai bidang adalah 3 atau "3".

### ParseInt

**Penggunaan**: ParseInt(\<bidang>). Mengonversi string atau angka floating-point menjadi integer.

**Contoh**: ParseInt(\<bidang>) mengembalikan 3 ketika nilai bidang adalah 3.2 atau "3.2".

## 8. Array

### ArrayToString

**Penggunaan**: ArrayToString(\<bidang array>,\[delimiter (opsional)]). Mengonversi array menjadi string.

**Contoh**: ArrayToString(\<Field1>,\<Field2>) mengembalikan "Divisi Produk-Divisi Teknologi-Divisi Bisnis" ketika nilai Field1 adalah "\[Divisi Produk, Divisi Teknologi, Divisi Bisnis]" dan nilai Field2 adalah "-". Jika Field2 kosong, hasilnya adalah "Divisi Produk,Divisi Teknologi,Divisi Bisnis".

### StringToArray

**Penggunaan**: StringToArray(\<bidang string>,\[delimiter (opsional)]). Mengurai string menjadi array.

**Contoh**: StringToArray(\<Field1>,\<Field2>) mengembalikan "\[Divisi Produk, Divisi Teknologi, Divisi Bisnis]" ketika nilai Field1 adalah "Divisi Produk-Divisi Teknologi-Divisi Bisnis" dan nilai Field2 adalah "-".

### ArrayLength

**Penggunaan**: ArrayLength(\<bidang array>). Mengembalikan panjang array.

**Contoh**: ArrayLength(\<Pilih Banyak atau bidang array lainnya>) mengembalikan "3" ketika nilai bidang adalah "Departemen" dengan opsi "Divisi Produk, Divisi Teknologi, Divisi Bisnis".

### ArrayCat

**Penggunaan**: ArrayCat(\<bidang array 1>,\<bidang array 2>,...). Menggabungkan beberapa array.

**Contoh**: ArrayCat(\<Pilih Banyak atau bidang array lainnya 1>,\<Pilih Banyak atau bidang array lainnya 2>,...) mengembalikan "Divisi Produk, Divisi Teknologi, Divisi Bisnis, Staf Produk, Staf Teknologi, Staf Bisnis" ketika nilai Field1 adalah "Divisi Produk, Divisi Teknologi, Divisi Bisnis" dan nilai Field2 adalah "Staf Produk, Staf Teknologi, Staf Bisnis".
