

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kueri dan transformasi data
<a name="v9-panels-query-xform"></a>

****  
**Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.**  
Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. [Bekerja di Grafana versi 10](using-grafana-v10.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

Grafana mendukung banyak jenis sumber [data](AMG-data-sources.md). *Kueri* sumber data mengembalikan data yang *dapat* diubah dan divisualisasikan oleh Grafana. Setiap sumber data menggunakan bahasa kueri sendiri, dan plugin sumber data masing-masing menerapkan antarmuka pengguna yang membangun kueri yang disebut editor kueri.

## Tentang pertanyaan
<a name="v9-panels-query-xform-about"></a>

Panel Grafana berkomunikasi dengan sumber data melalui kueri, yang mengambil data untuk visualisasi. Query adalah pertanyaan yang ditulis dalam bahasa query yang digunakan oleh sumber data.

Anda dapat mengonfigurasi frekuensi kueri dan batas pengumpulan data dalam opsi sumber data panel. Grafana mendukung hingga 26 kueri per panel.

Anda dapat menemukan informasi selengkapnya tentang bahasa kueri setiap sumber [data di bagian Sumber data](AMG-data-sources.md).

**Editor kueri**

Setiap *editor kueri* sumber data menyediakan antarmuka pengguna yang disesuaikan yang membantu Anda menulis kueri yang memanfaatkan kemampuan uniknya.

Karena perbedaan antara bahasa kueri, setiap editor kueri sumber data terlihat dan berfungsi secara berbeda. Bergantung pada sumber data Anda, editor kueri mungkin menyediakan fitur pelengkapan otomatis, nama metrik, saran variabel, atau antarmuka pembuatan kueri visual.

Untuk detail tentang fitur editor kueri unik sumber data tertentu, lihat dokumentasinya:
+ Untuk sumber data yang disertakan dengan Grafana, lihat Sumber [data bawaan](AMG-data-sources-builtin.md).
+ Untuk sumber data yang disertakan dengan edisi Grafana Enterprise, lihat. [Connect ke sumber data Enterprise](AMG-data-sources-enterprise.md)

**Sintaks kueri**

Sumber data menggunakan bahasa kueri yang berbeda untuk meminta data. Untuk detail tentang bahasa kueri unik sumber data tertentu, lihat dokumentasinya.

**Contoh PostgreSQL:**

```
SELECT hostname FROM host WHERE region IN($region)
```

**Contoh PromQL:**

```
query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
```

**Sumber data khusus**

**Grafana juga mencakup tiga sumber data khusus: **Grafana**, **Campuran**, dan Dasbor.** Untuk detailnya, lihat Sumber data

## Navigasikan tab kueri
<a name="v9-panels-query-xform-navigate"></a>

Tab **Query** panel terdiri dari elemen-elemen berikut:
+ **Pemilih sumber data** - Memilih sumber data untuk kueri.
+ **Opsi kueri:** — Menetapkan parameter pengambilan data maksimum dan interval waktu menjalankan kueri.
+ **Tombol inspektur kueri:** — Membuka panel inspektur kueri, tempat Anda dapat melihat dan mengoptimalkan kueri Anda.
+ **Daftar editor kueri:** — Daftar kueri yang telah Anda tulis.
+ **Ekspresi:** — Menggunakan pembuat ekspresi untuk membuat ekspresi peringatan. Untuk informasi selengkapnya tentang ekspresi, lihat[Tulis kueri ekspresi](v9-panels-query-xform-expressions.md).

## Tambahkan kueri
<a name="v9-panels-query-xform-add"></a>

Kueri mengembalikan data yang divisualisasikan Grafana di panel dasbor. Saat Anda membuat panel, Grafana secara otomatis memilih sumber data default.

**Untuk menambahkan kueri**

1. Edit panel tempat Anda menambahkan kueri.

1. Pilih tab **Kueri**.

1. Pilih menu tarik-turun **Sumber data** dan pilih sumber data.

1. Pilih **opsi Kueri** untuk mengonfigurasi jumlah maksimum titik data yang Anda butuhkan. Untuk informasi selengkapnya tentang opsi kueri, lihat[Opsi kueri](#v9-panels-query-xform-options).

1. Tulis kueri menggunakan editor kueri.

1. Pilih **Terapkan**.

Grafana menanyakan sumber data dan memvisualisasikan data.

## Kelola kueri
<a name="v9-panels-query-xform-manage"></a>

Grafana mengatur kueri dalam baris kueri yang dapat dilipat. Setiap baris kueri berisi editor kueri dan diidentifikasi dengan huruf (A, B, C, dan sebagainya).

Untuk mengelola kueri, Anda dapat menyalin kueri, menyembunyikan kueri, menghapus kueri, menyusun ulang kueri, dan beralih bantuan untuk editor kueri.

## Opsi kueri
<a name="v9-panels-query-xform-options"></a>

Pilih **Opsi kueri** di sebelah pemilih sumber data untuk melihat pengaturan sumber data yang dipilih. Perubahan yang Anda buat di sini hanya memengaruhi kueri yang dibuat di panel ini.

Grafana menetapkan default yang ditampilkan dalam teks abu-abu gelap. Perubahan ditampilkan dalam teks putih. Untuk mengembalikan bidang ke pengaturan default, hapus teks putih dari bidang.

Opsi kueri sumber data panel meliputi:
+ **Titik data maksimum** - Jika sumber data mendukungnya, ini menetapkan jumlah maksimum titik data untuk setiap seri yang dikembalikan. Jika kueri mengembalikan lebih banyak titik data daripada pengaturan titik data maks, maka sumber data mengurangi jumlah poin yang dikembalikan dengan menggabungkannya bersama dengan rata-rata, maks, atau fungsi lain.

  Anda dapat membatasi jumlah poin untuk meningkatkan kinerja kueri atau menghaluskan garis yang divisualisasikan. Nilai default adalah lebar (atau jumlah piksel) grafik, karena Anda hanya dapat memvisualisasikan titik data sebanyak panel grafik memiliki ruang untuk ditampilkan.

  Dengan streaming data, Grafana menggunakan nilai titik data maksimal untuk buffer bergulir. Streaming adalah aliran data yang berkelanjutan, dan buffering membagi aliran menjadi beberapa bagian. Misalnya, Loki mengalirkan data dalam mode tailing langsungnya.
+ **Interval min** - Menetapkan batas minimum untuk interval yang dihitung secara otomatis, yang biasanya merupakan interval pengikisan minimum. Jika titik data disimpan setiap 15 detik, Anda tidak mendapat manfaat dari interval yang lebih rendah dari itu. Anda juga dapat mengatur ini ke minimum yang lebih tinggi daripada interval scrape untuk mengambil kueri yang lebih kasar dan berfungsi dengan baik.
+ **Interval** - Menetapkan rentang waktu yang dapat Anda gunakan saat menggabungkan atau mengelompokkan titik data berdasarkan waktu.

  Grafana secara otomatis menghitung interval yang sesuai yang dapat Anda gunakan sebagai variabel dalam kueri templat. Variabel diukur dalam detik (`$__interval`) atau milidetik (`$__interval_ms`).

  Interval biasanya digunakan dalam fungsi agregasi seperti jumlah atau rata-rata. Misalnya, ini adalah kueri Prometheus yang menggunakan variabel interval:. `rate(http_requests_total[$__interval])`

  Interval otomatis ini dihitung berdasarkan lebar grafik. Saat pengguna memperkecil visualisasi, interval tumbuh, menghasilkan agregasi yang lebih kasar. Demikian juga, jika pengguna memperbesar, intervalnya berkurang, menghasilkan agregasi yang lebih halus.

  Untuk informasi selengkapnya, lihat [Variabel global](v9-dash-variable-add.md#v9-dash-variable-add-global).
+ **Waktu relatif** — Mengganti rentang waktu relatif untuk panel individu, yang menyebabkannya berbeda dari apa yang dipilih di pemilih waktu dasbor di sudut kanan atas dasbor. Anda dapat menggunakan ini untuk menampilkan metrik dari periode waktu atau hari yang berbeda di dasbor yang sama.
**catatan**  
Penggantian waktu panel tidak berpengaruh ketika rentang waktu dasbor mutlak.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/grafana/latest/userguide/v9-panels-query-xform.html)
+ **Pergeseran waktu** — Mengganti rentang waktu untuk panel individu dengan menggeser awal dan akhir relatif terhadap pemilih waktu. Misalnya, Anda dapat menggeser rentang waktu panel menjadi dua jam lebih awal dari pemilih waktu dasbor.
**catatan**  
Penggantian waktu panel tidak berpengaruh ketika rentang waktu dasbor mutlak.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/grafana/latest/userguide/v9-panels-query-xform.html)
+ Batas **waktu cache** — *(Terlihat hanya jika tersedia di sumber data)* Mengganti batas waktu cache default jika toko deret waktu Anda memiliki cache kueri. Tentukan nilai ini sebagai nilai numerik dalam hitungan detik.

# Tulis kueri ekspresi
<a name="v9-panels-query-xform-expressions"></a>

****  
**Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.**  
Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. [Bekerja di Grafana versi 10](using-grafana-v10.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

Ekspresi sisi server memungkinkan Anda memanipulasi data yang dikembalikan dari kueri dengan matematika dan operasi lainnya. Ekspresi membuat data baru dan tidak memanipulasi data yang dikembalikan oleh sumber data.

## Tentang ekspresi
<a name="v9-panels-query-about"></a>

Ekspresi sisi server memungkinkan Anda memanipulasi data yang dikembalikan dari kueri dengan matematika dan operasi lainnya. Ekspresi membuat data baru dan tidak memanipulasi data yang dikembalikan oleh sumber data, selain dari beberapa restrukturisasi data kecil untuk membuat input data yang dapat diterima untuk ekspresi.

**Menggunakan ekspresi**

Ekspresi terutama digunakan oleh [Grafana](v9-alerts.md) Alerting. Pemrosesan dilakukan sisi server, sehingga ekspresi dapat beroperasi tanpa sesi browser. Namun, ekspresi juga dapat digunakan dengan sumber data backend dan visualisasi.

**catatan**  
Ekspresi tidak berfungsi dengan peringatan dasbor lama.

Ekspresi dimaksudkan untuk menambah sumber data dengan memungkinkan kueri dari sumber data yang berbeda untuk digabungkan atau dengan menyediakan operasi yang tidak tersedia di sumber data.

**catatan**  
Jika memungkinkan, Anda harus melakukan pemrosesan data di dalam sumber data. Menyalin data dari penyimpanan ke server Grafana untuk diproses tidak efisien, sehingga ekspresi ditargetkan pada pemrosesan data ringan.

Ekspresi bekerja dengan kueri sumber data yang mengembalikan deret waktu atau data angka. Mereka juga beroperasi pada data [multi-dimensi](getting-started-grafanaui.md#time-series-dimensions). Misalnya, kueri yang mengembalikan beberapa seri, di mana setiap seri diidentifikasi oleh label atau tag.

Ekspresi individu mengambil satu atau lebih kueri atau ekspresi lain sebagai input dan menambahkan data ke hasilnya. Setiap ekspresi atau kueri individu diwakili oleh variabel yang merupakan pengidentifikasi bernama yang dikenal sebagai ReFID-nya (misalnya, huruf `A` default atau). `B`

Untuk mereferensikan output dari ekspresi individu atau kueri sumber data dalam ekspresi lain, pengidentifikasi ini digunakan sebagai variabel.

**Jenis ekspresi**

Ekspresi bekerja dengan dua jenis data.
+ Koleksi deret waktu.
+ Kumpulan angka, di mana setiap nomor adalah item.

Setiap koleksi dikembalikan dari kueri atau ekspresi sumber data tunggal dan diwakili oleh ReFID. Setiap koleksi adalah satu set, di mana setiap item dalam set diidentifikasi secara unik oleh dimensinya yang disimpan sebagai [label](getting-started-grafanaui.md#labels) atau pasangan nilai kunci.

**Kueri sumber data**

Ekspresi sisi server hanya mendukung kueri sumber data untuk sumber data backend. Data umumnya diasumsikan diberi label data deret waktu. Di masa depan kami bermaksud menambahkan pernyataan data tipe pengembalian kueri (nomor atau deret waktu) sehingga ekspresi dapat menangani kesalahan dengan lebih baik.

Kueri sumber data, bila digunakan dengan ekspresi, dijalankan oleh mesin ekspresi. Ketika melakukan ini, ia merestrukturisasi data menjadi satu deret waktu atau satu angka per frame data. Jadi misalnya jika menggunakan sumber data yang mengembalikan beberapa seri pada satu bingkai dalam tampilan tabel, Anda mungkin melihat itu terlihat berbeda saat dijalankan dengan ekspresi.

Saat ini, satu-satunya format seri non-waktu (angka) yang didukung saat menggunakan bingkai data adalah Anda memiliki respons tabel yang mengembalikan bingkai data tanpa waktu, kolom string, dan satu kolom angka:


| Loc | Host | AVG\$1CPU | 
| --- | --- | --- | 
|  MIA  |  A  |  1  | 
|  NYC  |  B  |  2  | 

Contoh di atas akan menghasilkan angka yang bekerja dengan ekspresi. Kolom string menjadi label dan kolom nomor nilai yang sesuai. Misalnya `{"Loc": "MIA", "Host": "A"}` dengan nilai 1.

**Operasi**

Anda dapat menggunakan operasi berikut dalam ekspresi: matematika, kurangi, dan sampel ulang.

**Matematika**

Matematika adalah untuk rumus matematika bentuk bebas pada deret waktu atau data angka. Operasi matematika mengambil angka dan deret waktu sebagai masukan dan mengubahnya menjadi angka dan deret waktu yang berbeda.

Data dari kueri atau ekspresi lain direferensikan dengan awalan ReFID dengan tanda dolar, misalnya. `$A` Jika variabel memiliki spasi dalam nama, maka Anda dapat menggunakan sintaks kurung kurung seperti. `${my variable}`

Konstanta numerik bisa dalam desimal (`2.24`), oktal (dengan nol terkemuka seperti`072`), atau hex (dengan seperti 0x terkemuka). `0x2A` Eksponensial dan tanda juga didukung (misalnya,). `-0.8e-2`

**Operator**

Operator aritmatika (`+`, biner dan unary`-`,,`*`,`/`,`%`, eksponen`**`), relasional (,`<`,,,`>`,`<=`) `==``!=`, `>=` dan logis (,, dan unary) `&&` didukung`||`. `!`

Bagaimana operasi berperilaku dengan data tergantung pada apakah itu adalah data angka atau deret waktu.

Dengan operasi biner`$A || $B`, seperti `$A + $B` atau, operator diterapkan dengan cara berikut tergantung pada jenis data:
+ Jika keduanya `$A` dan `$B` merupakan angka, maka operasi dilakukan antara dua angka.
+ Jika satu variabel adalah angka, dan variabel lainnya adalah deret waktu, maka operasi antara nilai setiap titik dalam deret waktu dan angka dilakukan.
+ Jika keduanya `$A` dan `$B` merupakan data deret waktu, maka operasi antara setiap nilai dalam dua seri dilakukan untuk setiap cap waktu yang ada di keduanya `$A` dan`$B`. `Resample`Operasi ini dapat digunakan untuk menyusun stempel waktu.

Ringkasan:
+ Nomor nomor OP = angka
+ Nomor seri OP = seri
+ Seri OP seri = seri

Karena ekspresi bekerja dengan beberapa seri atau angka yang diwakili oleh satu variabel, operasi biner juga melakukan penyatuan (gabungan) antara dua variabel. Ini dilakukan berdasarkan label pengenal yang terkait dengan setiap seri atau nomor individu.

Jadi jika Anda memiliki angka dengan label seperti `{host=web01}` in `$A` dan nomor lain `$B` dengan label yang sama maka operasi dilakukan antara dua item dalam setiap variabel, dan hasilnya akan berbagi label yang sama. Aturan untuk perilaku serikat ini adalah sebagai berikut:
+ Item tanpa label akan bergabung dengan apa pun.
+ Jika keduanya `$A` dan `$B` masing-masing hanya berisi satu item (satu seri, atau satu nomor), mereka akan bergabung.
+ Jika label adalah matematika yang tepat, mereka akan bergabung.
+ Jika label adalah bagian dari yang lain, misalnya item di `$A` diberi label `{host=A,dc=MIA}` dan item di `$B` diberi label, `{host=A}` mereka akan bergabung.
+ Jika dalam variabel seperti `$A` ada kunci tag yang berbeda untuk setiap item, perilaku bergabung tidak terdefinisi.

Operator relasional dan logis mengembalikan 0 untuk false 1 untuk true.

**Fungsi Matematika**

Sementara sebagian besar fungsi ada dalam operasi ekspresi sendiri, operasi matematika memang memiliki beberapa fungsi yang mirip dengan operator matematika atau simbol. Ketika fungsi dapat mengambil angka atau seri, dari jenis yang sama dengan argumen akan dikembalikan. Ketika itu adalah seri, operasi dilakukan untuk nilai setiap titik dalam seri.

*perut*

abs mengembalikan nilai absolut dari argumennya yang dapat berupa angka atau seri. Misalnya, `abs(-1)` atau `abs($A)`.

*is\$1inf*

is\$1inf mengambil angka atau seri dan mengembalikan `1` `Inf` nilai (negatif atau positif) dan `0` untuk nilai lainnya. Sebagai contoh, `is_inf($A)`.

**catatan**  
Jika Anda perlu secara khusus memeriksa ketidakterbatasan negatif misalnya, Anda dapat melakukan perbandingan seperti`$A == infn()`.

*is\$1nan*

is\$1nan mengambil angka atau seri dan mengembalikan `1` `NaN` nilai dan `0` nilai lainnya. Sebagai contoh, `is_nan($A)`. Fungsi ini `NaN` ada karena tidak sama dengan`NaN`.

*adalah\$1null*

is\$1null mengambil angka atau seri dan mengembalikan `1` `null` nilai dan nilai lainnya`0`. Sebagai contoh, `is_null($A)`.

*is\$1number*

is\$1number mengambil angka atau seri dan mengembalikan `1` untuk semua nilai bilangan real dan `0` untuk nilai lainnya (yaitu`null`,, `Inf+``Inf-`, dan`NaN`). Sebagai contoh, `is_number($A)`.

*log*

Log mengembalikan logaritma natural dari argumennya yang dapat berupa angka atau seri. Jika nilainya kurang dari 0, `NaN` dikembalikan. Misalnya, `log(-1)` atau `log($A)`.

*inf, infn, nan, dan null*

Fungsi inf, infn, nan, dan null semuanya mengembalikan satu nilai nama. Mereka terutama ada untuk pengujian. Contoh:`null()`.

*bulat*

Round mengembalikan nilai integer bulat. Misalnya, `round(3.123)` atau `round($A)`.

*ceil*

Ceil membulatkan angka ke nilai integer terdekat. Misalnya, `ceil(3.123)` mengembalikan `4`.

*lantai*

Lantai membulatkan angka ke bawah ke nilai integer terdekat. Misalnya,`floor(3.123`) kembali`3`.

**Mengurangi**

Reduce mengambil satu atau lebih deret waktu yang dikembalikan dari kueri atau ekspresi dan mengubah setiap seri menjadi satu nomor. Label deret waktu disimpan sebagai label pada setiap angka yang dikurangi yang dikeluarkan.

*Bidang:*
+ **Fungsi — Fungsi** reduksi yang digunakan
+ **Input** - Variabel (ReFID (seperti`A`)) untuk sampel ulang
+ **Mode** - Memungkinkan perilaku kontrol fungsi reduksi ketika seri berisi nilai non-numerik (null, NaN, \$1-Inf)

**Fungsi Reduksi**

*Hitungan*

Hitung mengembalikan jumlah poin di setiap seri.

*Berarti*

Mean mengembalikan total semua nilai dalam setiap seri dibagi dengan jumlah poin dalam seri itu. Dalam `strict` mode jika ada nilai dalam seri nol atau nan, atau jika seri kosong, NaN dikembalikan.

*Min dan Max*

Min dan Max mengembalikan nilai terkecil atau terbesar dalam seri masing-masing. Dalam `strict` mode jika ada nilai dalam seri nol atau nan, atau jika seri kosong, NaN dikembalikan.

*Jumlah*

Jumlah mengembalikan total semua nilai dalam seri. Jika seri memiliki panjang nol, jumlahnya akan menjadi 0. Dalam `strict` mode jika ada nilai NaN atau Null dalam seri, NaN dikembalikan.

*Terakhir*

Terakhir mengembalikan nomor terakhir dalam seri. Jika seri tidak memiliki nilai maka kembali NaN.

**Mode Pengurangan**

*Ketat*

Dalam mode Ketat, seri input diproses apa adanya. Jika ada nilai dalam seri non-numerik (null, NaN atau \$1-Inf), NaN dikembalikan.

*Jatuhkan Non-Numerik*

Dalam mode ini semua nilai non-numerik (null, NaN atau \$1-Inf) dalam seri input disaring sebelum menjalankan fungsi reduksi.

*Ganti Non-Numerik*

Dalam mode ini semua nilai non-numerik diganti dengan nilai yang telah ditentukan sebelumnya.

**Sampel ulang**

Sampel ulang mengubah stempel waktu di setiap deret waktu agar memiliki interval waktu yang konsisten. Kasus penggunaan utama adalah agar Anda dapat mengambil sampel ulang deret waktu yang tidak berbagi stempel waktu yang sama sehingga matematika dapat dilakukan di antara mereka. Ini dapat dilakukan dengan mengambil sampel ulang masing-masing dari dua seri, dan kemudian dalam operasi Matematika yang merujuk variabel sampel ulang.

*Bidang:*
+ **Input** - Variabel data deret waktu (ReFID (seperti`A`)) untuk sampel ulang
+ **Sampel ulang** ke — Durasi waktu untuk mengambil sampel ulang, misalnya `10s.` Satuan dapat berupa `s` detik, menit, `m` `h` berjam-jam, berhari-hari, `d` `w` berminggu-minggu, dan `y` bertahun-tahun.
+ **Downsample** - Fungsi reduksi untuk digunakan ketika ada lebih dari satu titik data per sampel jendela. Lihat operasi reduksi untuk detail perilaku.
+ **Upsample** — Metode yang digunakan untuk mengisi sampel jendela yang tidak memiliki titik data.
  + **pad** diisi dengan nilai yang diketahui terakhir
  + **isi ulang** dengan nilai yang diketahui berikutnya
  + **fillna** untuk mengisi jendela sampel kosong dengan NaNs

## Tulis ekspresi
<a name="v9-panels-query-write"></a>

Jika sumber data Anda mendukungnya, Grafana menampilkan tombol **Ekspresi dan menampilkan ekspresi** yang ada dalam daftar editor kueri.

**Untuk menulis ekspresi**

1. Buka panelnya.

1. Di bawah kueri, pilih **Ekspresi**.

1. Di bidang **Operasi**, pilih jenis ekspresi yang ingin Anda tulis.

1. Tulis ekspresinya.

1. Pilih **Terapkan**.

## Kasus khusus
<a name="v9-panels-query-special"></a>

Ketika sumber data yang ditanyakan tidak mengembalikan seri atau angka, mesin ekspresi kembali`NoData`. Misalnya, jika permintaan berisi dua kueri sumber data yang digabungkan dengan ekspresi, jika `NoData` dikembalikan oleh setidaknya salah satu kueri sumber data, maka hasil yang dikembalikan untuk seluruh kueri adalah. `NoData` Untuk informasi selengkapnya tentang cara Grafana Alerting memproses `NoData` hasil, lihat. [Tidak menangani data atau kasus kesalahan](v9-alerting-managerules-grafana.md#v9-alerting-rule-no-data-error)

# Bagikan hasil kueri dengan panel lain
<a name="v9-panels-query-share"></a>

****  
**Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.**  
Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. [Bekerja di Grafana versi 10](using-grafana-v10.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

Grafana memungkinkan Anda menggunakan hasil kueri dari satu panel untuk panel lain di dasbor. Berbagi hasil kueri di seluruh panel mengurangi jumlah kueri yang dibuat ke sumber data Anda, yang dapat meningkatkan kinerja dasbor Anda.

Sumber data Dasbor memungkinkan Anda memilih panel di dasbor yang berisi kueri yang ingin Anda bagikan hasilnya. Alih-alih mengirim kueri terpisah untuk setiap panel, Grafana mengirim satu kueri dan panel lainnya menggunakan hasil kueri untuk membangun visualisasi.

Strategi ini dapat secara drastis mengurangi jumlah kueri yang dibuat ketika Anda misalnya memiliki beberapa panel yang memvisualisasikan data yang sama.

**Untuk berbagi hasil kueri**

1. [Buat dasbor](v9-dash-creating.md).

1. Ubah judul menjadi`Source panel`. Anda akan menggunakan panel ini sebagai sumber untuk panel lainnya.

1. Tentukan kueri atau kueri yang ingin Anda bagikan.

   Jika Anda tidak memiliki sumber data yang tersedia, gunakan sumber **TestData**data, yang mengembalikan deret waktu acak yang dapat Anda gunakan untuk pengujian.

1. Tambahkan panel kedua dan pilih sumber data **Dasbor** di editor kueri.

1. Dalam **daftar Gunakan hasil dari panel**, pilih panel pertama yang Anda buat.

Semua query didefinisikan dalam panel sumber sekarang tersedia untuk panel baru. Kueri yang dibuat di panel sumber dapat dibagikan dengan beberapa panel.

Anda dapat mengklik salah satu kueri untuk pergi ke panel tempat mereka ditentukan.

# Mengubah data
<a name="v9-panels-xform"></a>

****  
**Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.**  
Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. [Bekerja di Grafana versi 10](using-grafana-v10.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

Transformasi adalah cara ampuh untuk memanipulasi data yang dikembalikan oleh kueri sebelum sistem menerapkan visualisasi. Menggunakan transformasi, Anda dapat:
+ Ganti nama bidang
+ Bergabunglah dengan data deret waktu
+ Lakukan operasi matematika di seluruh kueri
+ Gunakan output dari satu transformasi sebagai masukan ke transformasi lain

Untuk pengguna yang mengandalkan beberapa tampilan dari kumpulan data yang sama, transformasi menawarkan metode yang efisien untuk membuat dan memelihara banyak dasbor.

Anda juga dapat menggunakan output dari satu transformasi sebagai masukan ke transformasi lain, yang menghasilkan peningkatan kinerja.

**catatan**  
Terkadang sistem tidak dapat membuat grafik data yang diubah. Ketika itu terjadi, klik tombol **Tampilan tabel** di atas visualisasi untuk beralih ke tampilan tabel data. Ini dapat membantu Anda memahami hasil akhir dari transformasi Anda.

## Jenis transformasi
<a name="v9-panels-xform-types"></a>

Grafana menyediakan sejumlah cara agar Anda dapat mengubah data. Ada daftar lengkap fungsi transformasi di bawah ini.

## Urutan transformasi
<a name="v9-panels-xform-order"></a>

Ketika ada beberapa transformasi, Grafana menerapkannya dalam urutan yang terdaftar. Setiap transformasi menciptakan set hasil yang kemudian diteruskan ke transformasi berikutnya dalam pipa pemrosesan.

Urutan di mana Grafana menerapkan transformasi secara langsung berdampak pada hasil. Misalnya, jika Anda menggunakan transformasi Reduce untuk memadatkan semua hasil dari satu kolom menjadi satu nilai, maka Anda hanya dapat menerapkan transformasi ke nilai tunggal itu.

## Tambahkan fungsi transformasi ke data
<a name="v9-panels-xform-add"></a>

Langkah-langkah berikut memandu Anda dalam menambahkan transformasi ke data.

**Untuk menambahkan transformasi ke panel**

1. Arahkan ke panel tempat Anda ingin menambahkan satu atau lebih transformasi.

1. Pilih judul panel dan kemudian klik **Edit**.

1. Pilih tab **Transformasi**.

1. Pilih transformasi. Baris transformasi muncul di mana Anda mengonfigurasi opsi transformasi.

1. Untuk menerapkan transformasi lain, Pilih **Tambahkan transformasi**. Transformasi ini bekerja pada set hasil yang dikembalikan oleh transformasi sebelumnya.

## Debug transformasi
<a name="v9-panels-xform-debug"></a>

Untuk melihat input dan set hasil output transformasi, pilih ikon bug di sisi kanan baris transformasi.

Set hasil input dan output dapat membantu Anda men-debug transformasi.

## Hapus transformasi
<a name="v9-panels-xform-delete"></a>

Kami menyarankan Anda menghapus transformasi yang tidak Anda butuhkan. Saat Anda menghapus transformasi, Anda menghapus data dari visualisasi.

Prasyarat:

Identifikasi semua dasbor yang bergantung pada transformasi dan informasikan pengguna dasbor yang terkena dampak.

**Untuk menghapus transformasi**

1. Buka panel untuk mengedit.

1. Pilih tab **Transformasi**.

1. Pilih ikon sampah di sebelah transformasi yang ingin Anda hapus.

## Fungsi transformasi
<a name="v9-panels-xform-functions"></a>

Anda dapat melakukan transformasi berikut pada data Anda.

**Tambahkan bidang dari perhitungan**

Gunakan transformasi ini untuk menambahkan bidang baru yang dihitung dari dua bidang lainnya. Setiap transformasi memungkinkan Anda menambahkan satu bidang baru.
+ **Mode** - Pilih mode:
  + **Kurangi baris** - Terapkan perhitungan yang dipilih pada setiap baris bidang yang dipilih secara independen.
  + **Opsi biner** — Terapkan operasi matematika dasar (jumlah, kalikan, dll) pada nilai dalam satu baris dari dua bidang yang dipilih.
+ **Nama bidang** - Pilih nama bidang yang ingin Anda gunakan dalam perhitungan untuk bidang baru.
+ **Perhitungan** - Jika Anda memilih mode **Kurangi baris**, maka bidang **Perhitungan** akan muncul. Klik di bidang untuk melihat daftar pilihan perhitungan yang dapat Anda gunakan untuk membuat bidang baru. Untuk informasi tentang perhitungan yang tersedia, lihat [Jenis perhitungan](v9-panels-calculation-types.md).
+ **Operasi** — Jika Anda memilih mode **opsi biner**, maka bidang **Operasi** akan muncul. Bidang ini memungkinkan Anda melakukan operasi matematika dasar pada nilai dalam satu baris dari dua bidang yang dipilih. Anda juga dapat menggunakan nilai numerik untuk operasi biner.
+ **Alias** — (Opsional) Masukkan nama bidang baru Anda. Jika Anda membiarkan ini kosong, maka bidang akan diberi nama agar sesuai dengan perhitungan.
+ **Ganti semua bidang** — (Opsional) Pilih opsi ini jika Anda ingin menyembunyikan semua bidang lain dan hanya menampilkan bidang terhitung Anda dalam visualisasi.

**Bidang gabungan**

Transformasi ini menggabungkan semua bidang dari semua frame menjadi satu hasil. Pertimbangkan dua pertanyaan ini.

Kueri A:


| Temp | Waktu aktif | 
| --- | --- | 
|  15.4  |  1230233  | 

Kueri B:


| AQI | Kesalahan | 
| --- | --- | 
|  3.2  |  5  | 

Setelah Anda menggabungkan bidang, bingkai data akan menjadi:


| Temp | Waktu aktif | AQI | Kesalahan | 
| --- | --- | --- | --- | 
|  15.4  |  1230233  |  3.2  |  5  | 

**Config dari hasil kueri**

Transformasi ini memungkinkan Anda untuk memilih satu query dan dari itu mengekstrak opsi standar seperti **Min**, **Max**, **Unit** dan **Thresholds** dan menerapkannya ke hasil query lainnya. Ini memungkinkan konfigurasi visualisasi berbasis kueri dinamis.

Jika Anda ingin mengekstrak konfigurasi unik untuk setiap baris dalam hasil kueri konfigurasi, cobalah transformasi baris ke bidang.

**Pilihan**
+ **Query Config** - Pilih kueri yang mengembalikan data yang ingin Anda gunakan sebagai konfigurasi.
+ **Terapkan ke** - Pilih bidang atau seri apa yang akan diterapkan konfigurasi.
+ **Terapkan ke opsi** - Biasanya jenis bidang atau nama bidang regex tergantung pada opsi apa yang Anda pilih di **Terapkan** ke.

**Mengkonversi jenis bidang**

Transformasi ini mengubah jenis bidang bidang yang ditentukan.
+ **Bidang** - Pilih dari bidang yang tersedia
+ **as** — Pilih yang akan FieldType dikonversi ke
  + **Numerik** — upaya untuk membuat nilai angka
  + **String** - akan membuat nilai string
  + **Waktu** — mencoba mengurai nilai sebagai waktu
    + Akan menampilkan opsi untuk menentukan sebagai input oleh string DateFormat seperti yyyy-mm-dd atau DD MM YYYY hh: mm: ss
  + **Boolean** - akan membuat nilai-nilai Boolean

Misalnya kueri berikut dapat dimodifikasi dengan memilih bidang waktu, sebagai Waktu, dan Format Tanggal sebagai YYYY.


| Waktu | Tandai | Nilai | 
| --- | --- | --- | 
|  7/1/2017  |  atas  |  25  | 
|  8/2/2018  |  di bawah ini  |  22  | 
|  9/2/2019  |  di bawah ini  |  29  | 
|  10/4/2020  |  atas  |  22  | 

Hasilnya:


| Waktu | Tandai | Nilai | 
| --- | --- | --- | 
|  1/1/2017  |  atas  |  25  | 
|  1/1/2018  |  di bawah ini  |  22  | 
|  1/1/2019  |  di bawah ini  |  29  | 
|  1/1/2020  |  atas  |  22  | 

**Filter data berdasarkan nama**

Gunakan transformasi ini untuk menghapus bagian dari hasil kueri.

Grafana menampilkan bidang **Identifier**, diikuti oleh bidang yang dikembalikan oleh kueri Anda.

Anda dapat menerapkan filter dengan salah satu dari dua cara:
+ Masukkan ekspresi regex.
+ Pilih bidang untuk beralih pemfilteran pada bidang itu. Bidang yang difilter ditampilkan dengan teks abu-abu gelap, bidang tanpa filter memiliki teks putih.

**Filter data berdasarkan kueri**

Gunakan transformasi ini di panel yang memiliki beberapa kueri, jika Anda ingin menyembunyikan satu atau beberapa kueri.

Grafana menampilkan surat identifikasi kueri dalam teks abu-abu gelap. Klik pengenal kueri untuk beralih pemfilteran. Jika surat kueri berwarna putih, maka hasilnya akan ditampilkan. Jika surat kueri gelap, maka hasilnya disembunyikan.

**catatan**  
Transformasi ini tidak tersedia untuk Graphite karena sumber data ini tidak mendukung korelasi data yang dikembalikan dengan kueri.

**Filter data berdasarkan nilai**

Transformasi ini memungkinkan Anda untuk memfilter data Anda secara langsung di Grafana dan menghapus beberapa titik data dari hasil kueri Anda. Anda memiliki opsi untuk menyertakan atau mengecualikan data yang cocok dengan satu atau beberapa kondisi yang Anda tentukan. Kondisi diterapkan pada bidang yang dipilih.

Transformasi ini berguna jika sumber data Anda tidak memfilter secara native berdasarkan nilai. Anda juga dapat menggunakan ini untuk mempersempit nilai untuk ditampilkan jika Anda menggunakan kueri bersama.

Kondisi yang tersedia untuk semua bidang adalah:
+ **Regex - Cocokkan ekspresi regex**
+ **Apakah Null** - Cocokkan jika nilainya nol
+ **Is Not Null** — Cocokkan jika nilainya tidak null
+ **Sama** - Cocokkan jika nilainya sama dengan nilai yang ditentukan
+ **Berbeda** - cocok jika nilainya berbeda dari nilai yang ditentukan

Kondisi yang tersedia untuk bidang angka adalah:
+ **Lebih besar** — Cocokkan jika nilainya lebih besar dari nilai yang ditentukan
+ **Lower** — Cocokkan jika nilainya lebih rendah dari nilai yang ditentukan
+ **Lebih besar atau sama** — Cocokkan jika nilainya lebih besar atau sama
+ **Lebih rendah atau sama** - Cocokkan jika nilainya lebih rendah atau sama
+ **Rentang** - Cocokkan rentang antara minimum dan maksimum yang ditentukan, termasuk min dan maks

Pertimbangkan kumpulan data berikut:


| Waktu | Temperatur | Ketinggian | 
| --- | --- | --- | 
|  7/7/2020 11:34:23AM  |  32  |  101  | 
|  7/7/2020 11:34:22AM  |  28  |  125  | 
|  7/7/2020 11:34:21AM  |  26  |  110  | 
|  7/7/2020 11:34:20AM  |  23  |  98  | 
|  7/7/2020 10:32:24AM  |  31  |  95  | 
|  7/7/2020 10:31:22AM  |  20  |  85  | 
|  7/7/2020 9:30:57AM  |  19  |  101  | 

Jika Anda **Sertakan** titik data yang memiliki suhu di bawah 30° C, konfigurasi akan terlihat sebagai berikut:
+ **Jenis Filter** - `Include`
+ **Kondisi** — Baris yang `Temperature` cocok `Lower Than 30`

Dan Anda akan mendapatkan hasil berikut, di mana hanya suhu di bawah 30° C yang disertakan:


| Waktu | Temperatur | Ketinggian | 
| --- | --- | --- | 
|  7/7/2020 11:34:22AM  |  28  |  125  | 
|  7/7/2020 11:34:21AM  |  26  |  110  | 
|  7/7/2020 11:34:20AM  |  23  |  98  | 
|  7/7/2020 10:31:22AM  |  20  |  85  | 
|  7/7/2020 9:30:57AM  |  19  |  101  | 

Anda dapat menambahkan lebih dari satu kondisi ke filter. Misalnya, Anda mungkin ingin memasukkan data hanya jika ketinggiannya lebih besar dari 100. Untuk melakukannya, tambahkan kondisi itu ke konfigurasi berikut:
+ Jenis filter - `Include` baris yang `Match All` mengkondisikan
+ Kondisi 1 — Baris yang `Temperature` cocok `Lower` dengan `30`
+ Kondisi 2 — Baris yang `Altitude` cocok `Greater` dengan `100`

Bila Anda memiliki lebih dari satu kondisi, Anda dapat memilih apakah Anda ingin tindakan (sertakan/kecualikan) diterapkan pada baris yang **Cocokkan semua** kondisi atau **Cocokkan salah** satu kondisi yang Anda tambahkan.

Pada contoh di atas kami memilih **Match all** karena kami ingin memasukkan baris yang memiliki suhu lebih rendah dari 30 DAN ketinggian lebih tinggi dari 100. Jika kita ingin memasukkan baris yang memiliki suhu lebih rendah dari 30 ATAU ketinggian lebih tinggi dari 100 sebagai gantinya, maka kita akan memilih **Match any**. Ini akan mencakup baris pertama dalam data asli, yang memiliki suhu 32° C (tidak cocok dengan kondisi pertama) tetapi ketinggian 101 (yang cocok dengan kondisi kedua), sehingga disertakan.

Kondisi yang tidak valid atau tidak lengkap dikonfigurasi diabaikan.

**Grup oleh**

Transformasi ini mengelompokkan data dengan nilai bidang (kolom) tertentu dan memproses perhitungan pada setiap grup. Klik untuk melihat daftar pilihan perhitungan.

Berikut adalah contoh data asli.


| Waktu | ID Server | Suhu CPU | Status Server | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  server 1  |  80  |  Matikan  | 
|  7/7/2020 11:34:20AM  |  server 3  |  62  |  OK  | 
|  7/7/2020 10:32:20AM  |  server 2  |  90  |  Overload  | 
|  7/7/2020 10:31:22AM  |  server 3  |  55  |  OK  | 
|  7/7/2020 9:30:57AM  |  server 3  |  62  |  Rebooting  | 
|  7/7/2020 9:30:05AM  |  server 2  |  88  |  OK  | 
|  7/7/2020 9:28:06AM  |  server 1  |  80  |  OK  | 
|  7/7/2020 9:25:05AM  |  server 2  |  88  |  OK  | 
|  7/7/2020 9:23:07AM  |  server 1  |  86  |  OK  | 

Transformasi ini berjalan dalam dua langkah. Pertama, Anda menentukan satu atau beberapa bidang untuk mengelompokkan data berdasarkan. Ini akan mengelompokkan semua nilai yang sama dari bidang tersebut bersama-sama, seolah-olah Anda mengurutkannya. Misalnya jika kita mengelompokkan berdasarkan bidang ID Server, maka itu akan mengelompokkan data dengan cara ini:


| Waktu | ID Server | Suhu CPU | Status Server | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  server 1  |  80  |  Matikan  | 
|  7/7/2020 9:28:06AM  |  server 1  |  80  |  OK  | 
|  7/7/2020 9:23:07AM  |  server 1  |  86  |  OK  | 
|  7/7/2020 10:32:20AM  |  server 2  |  90  |  Overload  | 
|  7/7/2020 9:30:05AM  |  server 2  |  88  |  OK  | 
|  7/7/2020 9:25:05AM  |  server 2  |  88  |  OK  | 
|  7/7/2020 11:34:20AM  |  server 3  |  62  |  OK  | 
|  7/7/2020 10:31:22AM  |  server 3  |  55  |  OK  | 
|  7/7/2020 9:30:57AM  |  server 3  |  62  |  Rebooting  | 

Semua baris dengan nilai ID Server yang sama dikelompokkan bersama.

Setelah memilih bidang mana Anda ingin mengelompokkan data Anda, Anda dapat menambahkan berbagai perhitungan pada bidang lain, dan menerapkan perhitungan untuk setiap kelompok baris. Misalnya, kita bisa menghitung suhu CPU rata-rata untuk masing-masing server tersebut. Jadi kita dapat menambahkan perhitungan *rata-rata* yang diterapkan pada bidang Suhu CPU untuk mendapatkan yang berikut:


| ID Server | Suhu CPU (rata-rata) | 
| --- | --- | 
|  server 1  |  82  | 
|  server 2  |  88,6  | 
|  server 3  |  59,6  | 

Dan kita dapat menambahkan lebih dari satu perhitungan. Misalnya:
+ Untuk bidang Waktu, kita dapat menghitung nilai *Terakhir*, untuk mengetahui kapan titik data terakhir diterima untuk setiap server
+ Untuk bidang Status Server, kita dapat menghitung nilai *Terakhir* untuk mengetahui berapa nilai status terakhir untuk setiap server
+ Untuk bidang Temperatur, kita juga dapat menghitung nilai *Terakhir* untuk mengetahui berapa suhu yang dipantau terbaru untuk setiap server

Kami kemudian akan mendapatkan:


| ID Server | Suhu CPU (rata-rata) | Suhu CPU (terakhir) | Waktu (terakhir) | Status Server (terakhir) | 
| --- | --- | --- | --- | --- | 
|  server 1  |  82  |  80  |  7/7/2020 11:34:20AM  |  Matikan  | 
|  server 2  |  88,6  |  90  |  7/7/2020 10:32:20AM  |  Overload  | 
|  server 3  |  59,6  |  62  |  7/7/2020 11:34:20AM  |  OK  | 

Transformasi ini memungkinkan Anda untuk mengekstrak informasi penting dari deret waktu Anda dan menampilkannya dengan cara yang nyaman.

**Bergabung dengan bidang**

Gunakan transformasi ini untuk menggabungkan beberapa hasil menjadi satu tabel. Ini sangat berguna untuk mengubah beberapa hasil deret waktu menjadi satu tabel lebar dengan bidang waktu bersama.

*Gabung batin*

Gabungan bagian dalam menggabungkan data dari beberapa tabel di mana semua tabel berbagi nilai yang sama dari bidang yang dipilih. Jenis gabungan ini mengecualikan data di mana nilai tidak cocok di setiap hasil.

Gunakan transformasi ini untuk menggabungkan hasil dari beberapa kueri (menggabungkan pada bidang gabungan yang diteruskan atau kolom pertama kali) menjadi satu hasil, dan jatuhkan baris di mana gabungan yang berhasil tidak dapat terjadi.

Dalam contoh berikut, dua query mengembalikan data tabel. Ini divisualisasikan sebagai dua tabel terpisah sebelum menerapkan transformasi gabungan batin.

Kueri A:


| Waktu | Pekerjaan | Waktu aktif | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  25260122  | 
|  7/7/2020 11:24:20AM  |  postgre  |  123001233  | 
|  7/7/2020 11:14:20AM  |  postgre  |  345001233  | 

Kueri B:


| Waktu | Server | Kesalahan | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  server 1  |  15  | 
|  7/7/2020 11:24:20AM  |  server 2  |  5  | 
|  7/7/2020 11:04:20AM  |  server 3  |  10  | 

Hasil setelah menerapkan transformasi gabungan batin terlihat seperti berikut:


| Waktu | Pekerjaan | Waktu aktif | Server | Kesalahan | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  25260122  |  server 1  |  15  | 
|  7/7/2020 11:24:20AM  |  postgre  |  123001233  |  server 2  |  5  | 

*Bergabung di luar*

Gabungan luar mencakup semua data dari gabungan dalam dan baris di mana nilai tidak cocok di setiap input. Sementara gabungan bagian dalam bergabung dengan Kueri A dan Kueri B pada bidang waktu, gabungan luar mencakup semua baris yang tidak cocok di bidang waktu.

Dalam contoh berikut, dua query mengembalikan data tabel. Ini divisualisasikan sebagai dua tabel sebelum menerapkan transformasi gabungan luar.

Kueri A:


| Waktu | Pekerjaan | Waktu aktif | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  25260122  | 
|  7/7/2020 11:24:20AM  |  postgre  |  123001233  | 
|  7/7/2020 11:14:20AM  |  postgre  |  345001233  | 

Kueri B:


| Waktu | Server | Kesalahan | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  server 1  |  15  | 
|  7/7/2020 11:24:20AM  |  server 2  |  5  | 
|  7/7/2020 11:04:20AM  |  server 3  |  10  | 

Hasil setelah menerapkan transformasi gabungan luar terlihat seperti berikut:


| Waktu | Pekerjaan | Waktu aktif | Server | Kesalahan | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 11:04:20AM  |    |    |  server 3  |  10  | 
|  7/7/2020 11:14:20AM  |  postgre  |  345001233  |    |    | 
|  7/7/2020 11:34:20AM  |  simpul  |  25260122  |  server 1  |  15  | 
|  7/7/2020 11:24:20AM  |  postgre  |  123001233  |  server 2  |  5  | 

**Label ke bidang**

Transformasi ini mengubah hasil deret waktu yang menyertakan label atau tag ke dalam tabel di mana setiap kunci label dan nilai disertakan dalam hasil tabel. Label dapat ditampilkan baik sebagai kolom atau sebagai nilai baris.

Diberikan hasil query dari dua deret waktu:
+ Seri 1 - label Server = Server A, DataCenter = EU
+ Seri 2 - label Server = Server B, DataCenter = EU

Dalam mode **Kolom**, hasilnya terlihat seperti ini:


| Waktu | Server | Pusat data | Nilai | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  Server A  |  EU  |  1  | 
|  7/7/2020 11:34:20AM  |  Peladen B  |  EU  |  2  | 

Dalam mode “Baris”, hasilnya memiliki tabel untuk setiap seri dan menunjukkan setiap nilai label seperti ini:


| label | nilai | 
| --- | --- | 
|  Server  |  Server A  | 
|  Pusat data  |  EU  | 


| label | nilai | 
| --- | --- | 
|  Server  |  Peladen B  | 
|  Pusat data  |  EU  | 

*Nama bidang nilai*

Jika Anda memilih Server sebagai **nama bidang Nilai**, maka Anda akan mendapatkan satu bidang untuk setiap nilai label Server.


| Waktu | Pusat data | Server A | Peladen B | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  EU  |  1  |  2  | 

*Perilaku penggabungan*

Label ke bidang transformator secara internal adalah dua transformasi terpisah. Tindakan pertama pada seri tunggal dan mengekstrak label ke bidang. Yang kedua adalah transformasi gabungan yang menggabungkan semua hasil menjadi satu tabel. Transformasi gabungan mencoba bergabung di semua bidang yang cocok. Langkah penggabungan ini diperlukan dan tidak dapat dimatikan. 

**catatan**  
Transformasi *gabungan* dapat digunakan sendiri, dan dijelaskan secara rinci di bawah ini.

Untuk mengilustrasikan hal ini, berikut adalah contoh di mana Anda memiliki dua kueri yang mengembalikan deret waktu tanpa label yang tumpang tindih.
+ Seri 1 - label server = Servera
+ Seri 2 - label DataCenter = EU

Ini pertama-tama akan menghasilkan dua tabel ini:


| Waktu | Server | Nilai | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  ServerA  |  10  | 


| Waktu | Pusat data | Nilai | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  EU  |  20  | 

Setelah bergabung:


| Waktu | Server | Nilai | Pusat data | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  ServerA  |  10  |    | 
|  7/7/2020 11:34:20AM  |    |  20  |  EU  | 

**Gabungkan**

Gunakan transformasi ini untuk menggabungkan hasil dari beberapa kueri menjadi satu hasil tunggal. Ini sangat membantu saat menggunakan visualisasi panel tabel. Nilai yang dapat digabungkan digabungkan ke dalam baris yang sama. Nilai dapat digabungkan jika bidang bersama berisi data yang sama.

Dalam contoh di bawah ini, kita memiliki dua query mengembalikan data tabel. Ini divisualisasikan sebagai dua tabel terpisah sebelum menerapkan transformasi.

Kueri A:


| Waktu | Pekerjaan | Waktu aktif | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  25260122  | 
|  7/7/2020 11:24:20AM  |  postgre  |  123001233  | 

Kueri B:


| Waktu | Pekerjaan | Kesalahan | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  15  | 
|  7/7/2020 11:24:20AM  |  postgre  |  5  | 

Berikut adalah hasilnya setelah menerapkan transformasi Merge:


| Waktu | Pekerjaan | Kesalahan | Waktu aktif | 
| --- | --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  simpul  |  15  |  25260122  | 
|  7/7/2020 11:24:20AM  |  postgre  |  5  |  123001233  | 

**Mengatur bidang**

Gunakan transformasi ini untuk mengganti nama, menyusun ulang, atau menyembunyikan bidang yang dikembalikan oleh kueri.

**catatan**  
Transformasi ini hanya berfungsi di panel dengan satu kueri. Jika panel Anda memiliki beberapa kueri, maka Anda harus menerapkan transformasi gabungan Luar atau menghapus kueri tambahan.

Grafana menampilkan daftar bidang yang dikembalikan oleh kueri. Anda dapat:
+ Ubah urutan bidang dengan mengarahkan kursor ke bidang. Kursor berubah menjadi tangan dan kemudian Anda dapat menyeret bidang ke tempat barunya.
+ Sembunyikan atau tampilkan bidang dengan mengklik ikon mata di sebelah nama bidang.
+ Ganti nama bidang dengan mengetikkan nama baru di kotak Ganti nama.

**Partisi berdasarkan nilai**

Transformasi ini dapat membantu menghilangkan kebutuhan akan beberapa kueri ke sumber data yang sama dengan `WHERE` klausa yang berbeda saat membuat grafik beberapa seri. Pertimbangkan tabel SQL metrik dengan data berikut:


| Waktu | Region | Nilai | 
| --- | --- | --- | 
|  10/20/2022 12:00:00PM  |  AS  |  1520  | 
|  10/20/2022 12:00:00PM  |  EU  |  2936  | 
|  10/20/2022 1:00:00AM  |  AS  |  1327  | 
|  10/20/2022 1:00:00AM  |  EU  |  912  | 

Sebelum v9.3, jika Anda ingin merencanakan garis tren merah untuk AS dan yang biru untuk UE di TimeSeries panel yang sama, Anda mungkin harus membaginya menjadi dua kueri:

```
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='US'
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='EU'
```

Ini juga mengharuskan Anda untuk mengetahui sebelumnya wilayah mana yang benar-benar ada dalam tabel metrik.

Dengan transformator *Partition by values*, Anda sekarang dapat mengeluarkan satu kueri dan membagi hasilnya dengan nilai unik dalam satu atau lebih kolom (`fields`) pilihan Anda. Contoh berikut menggunakan `Region`.

```
SELECT Time, Region, Value FROM metrics WHERE Time > '2022-10-20'
```


| Waktu | Region | Nilai | 
| --- | --- | --- | 
|  10/20/2022 12:00:00PM  |  AS  |  1520  | 
|  10/20/2022 1:00:00AM  |  AS  |  1327  | 


| Waktu | Region | Nilai | 
| --- | --- | --- | 
|  10/20/2022 12:00:00PM  |  EU  |  2936  | 
|  10/20/2022 1:00:00AM  |  EU  |  912  | 

**Kurangi**

Transformasi *Reduce* menerapkan perhitungan untuk setiap bidang dalam frame dan mengembalikan nilai tunggal. Bidang waktu dihapus saat menerapkan transformasi ini.

Pertimbangkan masukannya:

Kueri A:


| Waktu | Temp | Waktu aktif | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  12.3  |  256122  | 
|  7/7/2020 11:24:20AM  |  15.4  |  1230233  | 

Kueri B:


| Waktu | AQI | Kesalahan | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  6.5  |  15  | 
|  7/7/2020 11:24:20AM  |  3.2  |  5  | 

Trafo reduksi memiliki dua mode:
+ **Seri ke baris** - Membuat baris untuk setiap bidang dan kolom untuk setiap perhitungan.
+ **Mengurangi bidang** - Menjaga struktur bingkai yang ada, tetapi menciutkan setiap bidang menjadi satu nilai.

Misalnya, jika Anda menggunakan perhitungan **Pertama** dan **Terakhir** dengan transformasi **Seri ke baris**, maka hasilnya adalah:


| Bidang | Pertama | Terakhir | 
| --- | --- | --- | 
|  Temp  |  12.3  |  15.4  | 
|  Waktu aktif  |  256122  |  1230233  | 
|  AQI  |  6.5  |  3.2  | 
|  Kesalahan  |  15  |  5  | 

Kolom Reduce dengan perhitungan Terakhir, menghasilkan dua frame, masing-masing dengan satu baris:

Kueri A:


| Temp | Waktu aktif | 
| --- | --- | 
|  15.4  |  1230233  | 

Kueri B:


| AQI | Kesalahan | 
| --- | --- | 
|  3.2  |  5  | 

**Ganti nama dengan regex**

Gunakan transformasi ini untuk mengganti nama bagian dari hasil kueri menggunakan ekspresi reguler dan pola penggantian.

Anda dapat menentukan ekspresi reguler, yang hanya diterapkan pada kecocokan, bersama dengan pola pengganti yang mendukung referensi kembali. Misalnya, bayangkan Anda memvisualisasikan penggunaan CPU per host dan Anda ingin menghapus nama domain. Anda dapat mengatur regex ke `([^\.]+)\..+` dan pola penggantian ke`$1`, `web-01.example.com` akan menjadi. `web-01`

**Baris ke bidang**

Transformasi baris ke bidang mengubah baris menjadi bidang terpisah. Ini dapat berguna karena bidang dapat ditata dan dikonfigurasi secara individual. Ini juga dapat menggunakan bidang tambahan sebagai sumber untuk konfigurasi bidang dinamis atau memetakannya ke label bidang. Label tambahan kemudian dapat digunakan untuk menentukan nama tampilan yang lebih baik untuk bidang yang dihasilkan.

Transformasi ini mencakup tabel bidang yang mencantumkan semua bidang dalam data yang dikembalikan oleh kueri konfigurasi. Tabel ini memberi Anda kontrol atas bidang apa yang harus dipetakan ke setiap properti konfigurasi (opsi \$1Gunakan sebagai\$1\$1). Anda juga dapat memilih nilai mana yang akan dipilih jika ada beberapa baris dalam data yang dikembalikan.

Transformasi ini membutuhkan:
+ Satu bidang untuk digunakan sebagai sumber nama bidang.

  Secara default, transformasi menggunakan bidang string pertama sebagai sumber. Anda dapat mengganti pengaturan default ini dengan memilih **Nama bidang** di kolom **Use as** untuk bidang yang ingin Anda gunakan sebagai gantinya.
+ Satu bidang untuk digunakan sebagai sumber nilai.

  Secara default, transformasi menggunakan bidang angka pertama sebagai sumber. Tetapi Anda dapat mengganti pengaturan default ini dengan memilih **Nilai bidang** di kolom **Gunakan sebagai** kolom untuk bidang yang ingin Anda gunakan sebagai gantinya.

Berguna saat memvisualisasikan data di:
+ Pengukur
+ Stat
+ Bagan pai

*Petakan bidang tambahan ke label*

Jika bidang tidak dipetakan ke properti konfigurasi Grafana akan secara otomatis menggunakannya sebagai sumber untuk label pada bidang keluaran-

Contoh:


| Nama | DataCenter | Nilai | 
| --- | --- | --- | 
|  ServerA  |  AS  |  100  | 
|  ServerB  |  EU  |  200  | 

Output:


| ServerA (label: DataCenter: AS) | ServerB (label: DataCenter: EU) | 
| --- | --- | 
|  10  |  20  | 

Label tambahan sekarang dapat digunakan dalam nama tampilan bidang memberikan nama bidang yang lebih lengkap.

Jika Anda ingin mengekstrak konfigurasi dari satu kueri dan menerapkannya ke kueri lain, Anda harus menggunakan konfigurasi dari transformasi hasil kueri.

*Contoh*

Masukan:


| Nama | Nilai | Maks | 
| --- | --- | --- | 
|  ServerA  |  10  |  100  | 
|  ServerB  |  20  |  200  | 
|  ServerC  |  30  |  300  | 

Output:


| ServerA (konfigurasi: maks = 100) | ServerB (konfigurasi: maks = 200) | ServerC (konfigurasi: maks = 300) | 
| --- | --- | --- | 
|  10  |  20  |  30  | 

Seperti yang Anda lihat setiap baris dalam data sumber menjadi bidang terpisah. Setiap bidang sekarang juga memiliki set opsi konfigurasi maks. Opsi seperti Min, Max, Unit dan Thresholds adalah bagian dari konfigurasi bidang dan jika diatur seperti ini akan digunakan oleh visualisasi alih-alih opsi apa pun yang dikonfigurasi secara manual di panel opsi editor panel.

**Siapkan deret waktu**

Mempersiapkan transformasi deret waktu berguna ketika sumber data mengembalikan data deret waktu dalam format yang tidak didukung oleh panel yang ingin Anda gunakan.

Transformasi ini membantu Anda mengatasi masalah ini dengan mengonversi data deret waktu dari format lebar ke format panjang atau sebaliknya.

Pilih opsi **deret waktu Multi-frame** untuk mengubah kerangka data deret waktu dari format lebar ke format panjang.

Pilih opsi **Wide time series** untuk mengubah kerangka data deret waktu dari format panjang ke format lebar.

**Seri ke baris**

Gunakan transformasi ini untuk menggabungkan hasil dari beberapa kueri data deret waktu menjadi satu hasil tunggal. Ini sangat membantu saat menggunakan visualisasi panel tabel.

Hasil dari transformasi ini akan berisi tiga kolom: Waktu, Metrik, dan Nilai. Kolom Metrik ditambahkan sehingga Anda dapat dengan mudah melihat dari mana kueri metrik berasal. Sesuaikan nilai ini dengan mendefinisikan Label pada kueri sumber.

Pada contoh di bawah ini, kami memiliki dua pertanyaan yang mengembalikan data deret waktu. Ini divisualisasikan sebagai dua tabel terpisah sebelum menerapkan transformasi.

Kueri A:


| Waktu | Temperatur | 
| --- | --- | 
|  7/7/2020 11:34:20AM  |  25  | 
|  7/7/2020 10:31:22AM  |  22  | 
|  7/7/2020 9:30:05AM  |  19  | 

Kueri B:


| Waktu | Kelembaban | 
| --- | --- | 
|  7/7/2020 11:34:20AM  |  24  | 
|  7/7/2020 10:32:20AM  |  29  | 
|  7/7/2020 9:30:57AM  |  33  | 

Berikut adalah hasil setelah menerapkan Seri ke transformasi baris.


| Waktu | Metrik | Nilai | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  Temperatur  |  25  | 
|  7/7/2020 11:34:20AM  |  Kelembaban  |  22  | 
|  7/7/2020 10:32:20AM  |  Kelembaban  |  29  | 
|  7/7/2020 10:31:22AM  |  Temperatur  |  22  | 
|  7/7/2020 9:30:57AM  |  Kelembaban  |  33  | 
|  7/7/2020 9:30:05AM  |  Temperatur  |  19  | 

**Urutkan berdasarkan**

Transformasi ini akan mengurutkan setiap frame dengan bidang yang dikonfigurasi, Ketika `reverse` dicentang, nilai akan kembali dalam urutan yang berlawanan.

**Batasi**

Gunakan transformasi ini untuk membatasi jumlah baris yang ditampilkan.

Pada contoh di bawah ini, kami memiliki respons berikut dari sumber data:


| Waktu | Metrik | Nilai | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  Temperatur  |  25  | 
|  7/7/2020 11:34:20AM  |  Kelembaban  |  22  | 
|  7/7/2020 10:32:20AM  |  Kelembaban  |  29  | 
|  7/7/2020 10:31:22AM  |  Temperatur  |  22  | 
|  7/7/2020 9:30:57AM  |  Kelembaban  |  33  | 
|  7/7/2020 9:30:05AM  |  Temperatur  |  19  | 

Berikut adalah hasil setelah menambahkan transformasi Limit dengan nilai '3':


| Waktu | Metrik | Nilai | 
| --- | --- | --- | 
|  7/7/2020 11:34:20AM  |  Temperatur  |  25  | 
|  7/7/2020 11:34:20AM  |  Kelembaban  |  22  | 
|  7/7/2020 10:32:20AM  |  Kelembaban  |  29  | 

# Memecahkan masalah kueri
<a name="v9-panels-query-troubleshoot"></a>

****  
**Topik dokumentasi ini dirancang untuk ruang kerja Grafana yang mendukung Grafana versi 9.x.**  
Untuk ruang kerja Grafana yang mendukung Grafana versi 10.x, lihat. [Bekerja di Grafana versi 10](using-grafana-v10.md)  
Untuk ruang kerja Grafana yang mendukung Grafana versi 8.x, lihat. [Bekerja di Grafana versi 8](using-grafana-v8.md)

Halaman ini memberikan informasi untuk memecahkan masalah dasbor umum.

**Saya mendapatkan hasil yang berbeda ketika saya mengatur ulang fungsi saya**

Urutan fungsi sangat penting. Sama seperti dalam matematika, urutan yang Anda tempatkan fungsi Anda dapat memengaruhi hasilnya.

**Periksa permintaan dan respons kueri Anda**

Masalah yang paling umum terkait dengan permintaan dan respons dari sumber data Anda. Bahkan jika itu terlihat seperti masalah bug atau visualisasi di Grafana, hampir selalu masalah dengan kueri sumber data atau respons sumber data. Mulailah dengan memeriksa permintaan dan respons panel Anda.

Untuk informasi selengkapnya, lihat [Periksa data permintaan dan respons](v9-panels-panel-inspector.md).

**Kueri saya lambat**

Berapa banyak titik data yang dikembalikan kueri Anda? Kueri yang mengembalikan banyak titik data akan lambat. Coba ini:
+ Dalam **opsi Query**, batasi **poin data Max** yang dikembalikan.
+ Dalam **opsi Query**, tingkatkan waktu **interval Min**.
+ Dalam kueri Anda, gunakan `group by` fungsi.