Jenis ukuran

Halaman ini mengacu pada parameter type yang merupakan bagian dari pengukuran.

type juga dapat digunakan sebagai bagian dari dimensi atau filter, yang dijelaskan di halaman dokumentasi Jenis dimensi, filter, dan parameter.

type juga dapat digunakan sebagai bagian dari grup dimensi, yang dijelaskan di halaman dokumentasi parameter dimension_group.

Penggunaan

view: view_name {
  measure: field_name {
    type: measure_field_type
  }
}
Hierarki
type
Jenis Kolom yang Mungkin
Ukur

Menerima
Jenis ukuran

Halaman ini mencakup detail tentang berbagai jenis yang dapat ditetapkan ke ukuran. Ukuran hanya dapat memiliki satu jenis, dan secara default adalah string jika tidak ada jenis yang ditentukan.

Beberapa jenis pengukuran memiliki parameter pendukung, yang dijelaskan dalam bagian yang sesuai.

Kategori jenis pengukuran

Setiap jenis pengukuran termasuk dalam salah satu kategori berikut. Kategori ini menentukan apakah jenis pengukuran melakukan agregasi, jenis kolom yang dapat dirujuk oleh jenis pengukuran, dan apakah Anda dapat memfilter jenis pengukuran menggunakan parameter filters:

  • Ukuran agregat: Jenis ukuran agregat melakukan agregasi, seperti sum dan average. Ukuran gabungan hanya dapat merujuk pada dimensi, bukan ukuran lain. Ini adalah satu-satunya jenis pengukuran yang kompatibel dengan parameter filters.
  • Ukuran non-gabungan: Ukuran non-gabungan, seperti namanya, adalah jenis ukuran yang tidak melakukan agregasi, seperti number dan yesno. Jenis pengukuran ini melakukan transformasi dasar dan, karena tidak melakukan agregasi, hanya dapat mereferensikan ukuran gabungan atau dimensi yang sebelumnya diagregasi. Anda tidak dapat menggunakan parameter filters dengan jenis pengukuran ini.
  • Ukuran post-SQL: Ukuran post-SQL adalah jenis ukuran khusus yang melakukan perhitungan tertentu setelah Looker membuat SQL kueri. Garis tren hanya dapat mereferensikan ukuran numerik atau dimensi numerik. Anda tidak dapat menggunakan parameter filters dengan jenis pengukuran ini.

Daftar definisi jenis

Jenis Kategori Deskripsi
average Agregat Menghasilkan rata-rata (mean) nilai dalam kolom
average_distinct Agregat Membuat rata-rata (mean) nilai dengan benar saat menggunakan data yang tidak dinormalisasi. Lihat bagian average_distinct untuk mengetahui deskripsi lengkapnya.
count Agregat Menghasilkan jumlah baris
count_distinct Agregat Menghasilkan jumlah nilai unik dalam kolom
date Non-gabungan Untuk ukuran yang berisi tanggal
list Agregat Membuat daftar nilai unik dalam kolom
max Agregat Menghasilkan nilai maksimum dalam kolom
median Agregat Menghasilkan median (nilai titik tengah) nilai dalam kolom
median_distinct Agregat Membuat median (nilai titik tengah) nilai dengan benar saat gabungan menyebabkan fanout. Lihat bagian median_distinct untuk mengetahui deskripsi lengkapnya.
min Agregat Menghasilkan nilai minimum dalam kolom
number Non-gabungan Untuk ukuran yang berisi angka
percent_of_previous Post-SQL Menghasilkan perbedaan persentase antara baris yang ditampilkan
percent_of_total Post-SQL Menghasilkan persentase total untuk setiap baris yang ditampilkan
percentile Agregat Menghasilkan nilai pada persentil yang ditentukan dalam kolom
percentile_distinct Agregat Membuat nilai dengan benar pada persentil yang ditentukan saat gabungan menyebabkan fanout. Lihat bagian percentile_distinct untuk mengetahui deskripsi lengkapnya.
running_total Post-SQL Menghasilkan total yang berjalan untuk setiap baris yang ditampilkan
period_over_period Agregat Merujuk pada agregasi dari jangka waktu sebelumnya
string Non-gabungan Untuk ukuran yang berisi huruf atau karakter khusus (seperti fungsi GROUP_CONCAT MySQL)
sum Agregat Menghasilkan jumlah nilai dalam kolom
sum_distinct Agregat Membuat jumlah nilai dengan benar saat menggunakan data yang tidak dinormalisasi.

Lihat bagian sum_distinct untuk mengetahui deskripsi lengkapnya.
yesno Non-gabungan Untuk kolom yang akan menampilkan apakah sesuatu benar atau salah
int Non-gabungan Dihapus 5.4 Digantikan oleh type: number

average

type: average merata-ratakan nilai dalam kolom tertentu. Fungsi ini mirip dengan fungsi AVG SQL. Namun, tidak seperti SQL mentah, Looker akan menghitung rata-rata dengan benar meskipun gabungan kueri Anda berisi fanout.

Parameter sql untuk ukuran type: average dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Kolom type: average dapat diformat menggunakan parameter value_format atau value_format_name.

Misalnya, LookML berikut membuat kolom bernama avg_order dengan menghitung rata-rata dimensi sales_price, lalu menampilkannya dalam format uang ($1.234,56):

measure: avg_order {
  type: average
  sql: ${sales_price} ;;
  value_format_name: usd
}

average_distinct

type: average_distinct digunakan dengan set data yang tidak dinormalisasi. Fungsi ini menghitung rata-rata nilai yang tidak berulang dalam kolom tertentu, berdasarkan nilai unik yang ditentukan oleh parameter sql_distinct_key.

Ini adalah konsep lanjutan yang mungkin lebih jelas dijelaskan dengan contoh. Pertimbangkan tabel yang tidak dinormalisasi seperti ini:

ID Item Pesanan ID Pesanan Pengiriman Pesanan
1 1 10,00
2 1 10,00
3 2 20.00
4 2 20.00
5 2 20.00

Dalam situasi ini, Anda dapat melihat bahwa ada beberapa baris untuk setiap pesanan. Akibatnya, jika Anda menambahkan ukuran type: average dasar untuk kolom order_shipping, Anda akan mendapatkan nilai 16,00, meskipun rata-rata sebenarnya adalah 15,00.

 # Will NOT calculate the correct average
measure: avg_shipping {
  type: average
  sql: ${order_shipping} ;;
}

Untuk mendapatkan hasil yang akurat, Anda dapat menentukan cara Looker mengidentifikasi setiap entitas unik (dalam hal ini, setiap pesanan unik) menggunakan parameter sql_distinct_key. Ini akan menghitung jumlah 15.00 yang benar:

 # Will calculate the correct average
measure: avg_shipping {
  type: average_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Setiap nilai unik sql_distinct_key hanya boleh memiliki satu nilai yang sesuai di sql. Dengan kata lain, contoh sebelumnya berfungsi karena setiap baris dengan order_id 1 memiliki order_shipping yang sama, yaitu 10.00, dan setiap baris dengan order_id 2 memiliki order_shipping yang sama, yaitu 20.00.

Kolom type: average_distinct dapat diformat menggunakan parameter value_format atau value_format_name.

count

type: count melakukan penghitungan tabel, mirip dengan fungsi COUNT SQL. Namun, tidak seperti SQL mentah, Looker akan menghitung jumlah dengan benar meskipun gabungan kueri Anda berisi fanout.

Pengukuran type: count melakukan penghitungan tabel yang didasarkan pada kunci utama tabel, sehingga pengukuran type: count tidak mendukung parameter sql.

Jika Anda ingin melakukan penghitungan tabel pada kolom selain kunci utama tabel, gunakan ukuran type: count_distinct. Atau, jika tidak ingin menggunakan count_distinct, Anda dapat menggunakan ukuran type: number (lihat postingan Komunitas Cara menghitung kunci non-primer untuk mengetahui informasi selengkapnya).

Misalnya, LookML berikut membuat kolom number_of_products:

view: products {
  measure: number_of_products {
    type: count
    drill_fields: [product_details*]  # optional
  }
}

Sangat umum untuk memberikan parameter drill_fields (untuk kolom) saat menentukan ukuran type: count, sehingga pengguna dapat melihat setiap data yang membentuk jumlah saat mereka mengkliknya.

Saat Anda menggunakan pengukuran type: count dalam Eksplorasi, visualisasi akan memberi label pada nilai yang dihasilkan dengan nama tampilan, bukan kata "Jumlah". Untuk menghindari kebingungan, sebaiknya buat nama tampilan Anda dalam bentuk jamak, pilih Tampilkan Nama Kolom Lengkap di bagian Deret dalam setelan visualisasi, atau gunakan view_label dengan nama tampilan Anda dalam bentuk jamak.

Anda dapat menambahkan filter ke ukuran type: count menggunakan parameter filters.

count_distinct

type: count_distinct menghitung jumlah nilai berbeda dalam kolom tertentu. Fungsi ini menggunakan fungsi COUNT DISTINCT SQL.

Parameter sql untuk ukuran type: count_distinct dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel, dimensi LookML, atau kombinasi dimensi LookML.

Misalnya, LookML berikut membuat kolom number_of_unique_customers, yang menghitung jumlah ID pelanggan unik:

measure: number_of_unique_customers {
  type: count_distinct
  sql: ${customer_id} ;;
}

Anda dapat menambahkan filter ke ukuran type: count_distinct menggunakan parameter filters.

date

type: date digunakan dengan kolom yang berisi tanggal.

Parameter sql untuk ukuran type: date dapat menggunakan ekspresi SQL valid yang menghasilkan tanggal. Pada praktiknya, jenis ini jarang digunakan, karena sebagian besar fungsi agregat SQL tidak menampilkan tanggal. Salah satu pengecualian umum adalah MIN atau MAX dari dimensi tanggal.

Membuat ukuran tanggal maks atau min dengan type: date

Jika ingin membuat ukuran tanggal maksimum atau minimum, Anda mungkin awalnya berpikir bahwa ukuran type: max atau type: min akan berfungsi. Namun, jenis pengukuran ini hanya kompatibel dengan kolom numerik. Sebagai gantinya, Anda dapat mengambil tanggal maksimum atau minimum dengan menentukan ukuran type: date dan membungkus kolom tanggal yang dirujuk dalam parameter sql dalam fungsi MIN() atau MAX().

Misalkan Anda memiliki grup dimensi type: time, yang disebut updated:

dimension_group: updated {
  type: time
  timeframes: [time, date, week, month, raw]
  sql: ${TABLE}.updated_at ;;
}

Anda dapat membuat ukuran type: date untuk mengambil tanggal maksimum kelompok dimensi ini sebagai berikut:

measure: last_updated_date {
  type: date
  sql: MAX(${updated_raw}) ;;
  convert_tz: no
}

Dalam contoh ini, alih-alih menggunakan ukuran type: max untuk membuat ukuran last_updated_date, fungsi MAX() diterapkan dalam parameter sql. Ukuran last_updated_date juga memiliki parameter convert_tz yang ditetapkan ke no untuk mencegah konversi zona waktu ganda dalam ukuran, karena konversi zona waktu telah terjadi dalam definisi grup dimensi updated. Untuk mengetahui informasi selengkapnya, lihat dokumentasi tentang parameter convert_tz.

Dalam contoh LookML untuk ukuran last_updated_date, type: date dapat dihilangkan, dan nilai akan diperlakukan sebagai string, karena string adalah nilai default untuk type. Namun, Anda akan mendapatkan kemampuan pemfilteran yang lebih baik untuk pengguna jika menggunakan type: date.

Anda mungkin juga melihat bahwa definisi ukuran last_updated_date mereferensikan jangka waktu ${updated_raw}, bukan jangka waktu ${updated_date}. Karena nilai yang ditampilkan dari ${updated_date} adalah string, Anda harus menggunakan ${updated_raw} untuk merujuk nilai tanggal sebenarnya.

Anda juga dapat menggunakan parameter datatype dengan type: date untuk meningkatkan performa kueri dengan menentukan jenis data tanggal yang digunakan tabel database Anda.

Membuat ukuran maks atau min untuk kolom tanggal waktu

Menghitung nilai maksimum untuk kolom type: datetime sedikit berbeda. Dalam hal ini, Anda ingin membuat ukuran tanpa mendeklarasikan jenisnya, seperti ini:

measure: last_updated_datetime {
  sql: MAX(${TABLE}.datetime_string_field) ;;
}

list

type: list membuat daftar nilai berbeda dalam kolom tertentu. Fungsi ini mirip dengan fungsi GROUP_CONCAT MySQL.

Anda tidak perlu menyertakan parameter sql untuk pengukuran type: list. Sebagai gantinya, Anda dapat menggunakan parameter list_field untuk menentukan dimensi yang ingin Anda gunakan untuk membuat daftar.

Penggunaannya adalah sebagai berikut:

view: view_name {
  measure: field_name {
    type: list
    list_field: my_field_name
  }
}

Misalnya, LookML berikut membuat ukuran name_list berdasarkan dimensi name:

measure: name_list {
  type: list
  list_field: name
}

Perhatikan hal berikut untuk list:

  • Jenis pengukuran list tidak mendukung pemfilteran. Anda tidak dapat menggunakan parameter filters pada pengukuran type: list.
  • Jenis pengukuran list tidak dapat dirujuk menggunakan operator penggantian ($). Anda tidak dapat menggunakan sintaksis ${} untuk merujuk pada pengukuran type: list.

Dialek database yang didukung untuk list

Agar Looker mendukung type: list di project Looker Anda, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek yang mendukung type: list dalam rilis terbaru Looker:

Dialek Didukung?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

max

type: max menemukan nilai terbesar dalam kolom tertentu. Fungsi ini menggunakan fungsi MAX SQL.

Parameter sql untuk ukuran type: max dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Karena ukuran type: max hanya kompatibel dengan kolom numerik, Anda tidak dapat menggunakan ukuran type: max untuk menemukan tanggal maksimum. Sebagai gantinya, Anda dapat menggunakan fungsi MAX() dalam parameter sql dari ukuran type: date untuk mengambil tanggal maksimum, seperti yang ditunjukkan sebelumnya dalam contoh di bagian date.

Kolom type: max dapat diformat menggunakan parameter value_format atau value_format_name.

Misalnya, LookML berikut membuat kolom bernama largest_order dengan melihat dimensi sales_price, lalu menampilkannya dalam format uang ($1.234,56):

measure: largest_order {
  type: max
  sql: ${sales_price} ;;
  value_format_name: usd
}

Anda tidak dapat menggunakan ukuran type: max untuk string atau tanggal, tetapi Anda dapat menambahkan fungsi MAX secara manual untuk membuat kolom tersebut, seperti ini:

measure: latest_name_in_alphabet {
  type: string
  sql: MAX(${name}) ;;
}

median

type: median menampilkan nilai titik tengah untuk nilai dalam kolom tertentu. Hal ini sangat berguna jika data memiliki beberapa nilai pencilan yang sangat besar atau kecil yang akan memiringkan rata-rata (mean) dasar data.

Pertimbangkan tabel seperti ini:

ID Item Pesanan Biaya Titik tengah?
2 10,00
4 10,00
3 20.00 Nilai titik tengah
1 80.00
5 90,00

Tabel diurutkan berdasarkan biaya, tetapi hal itu tidak memengaruhi hasilnya. Meskipun jenis average akan menampilkan 42 (menambahkan semua nilai dan membaginya dengan 5), jenis median akan menampilkan nilai titik tengah: 20,00.

Jika jumlah nilai genap, nilai median dihitung dengan mengambil nilai rata-rata dari dua nilai yang paling dekat dengan titik tengah. Pertimbangkan tabel seperti ini dengan jumlah baris genap:

ID Item Pesanan Biaya Titik tengah?
2 10
3 20 Terdekat sebelum titik tengah
1 80 Terdekat setelah titik tengah
4 90

Median, nilai tengah, adalah (20 + 80)/2 = 50.

Median juga sama dengan nilai pada persentil ke-50.

Parameter sql untuk ukuran type: median dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Kolom type: median dapat diformat menggunakan parameter value_format atau value_format_name.

Contoh

Misalnya, LookML berikut membuat kolom bernama median_order dengan menghitung rata-rata dimensi sales_price, lalu menampilkannya dalam format uang ($1.234,56):

measure: median_order {
  type: median
  sql: ${sales_price} ;;
  value_format_name: usd
}

Hal-hal yang perlu dipertimbangkan untuk median

Jika Anda menggunakan median untuk kolom yang terlibat dalam fanout, Looker akan mencoba menggunakan median_distinct. Namun, medium_distinct hanya didukung untuk dialek tertentu. Jika median_distinct tidak tersedia untuk dialek Anda, Looker akan menampilkan error. Karena median dapat dianggap sebagai persentil ke-50, error menyatakan bahwa dialek tidak mendukung persentil yang berbeda.

Dialek database yang didukung untuk median

Agar Looker mendukung jenis median di project Looker Anda, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek mana yang mendukung jenis median dalam rilis Looker terbaru:

Dialek Didukung?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

Jika ada fanout yang terlibat dalam kueri, Looker akan mencoba mengonversi median menjadi median_distinct. Fitur ini hanya berhasil dalam dialek yang mendukung median_distinct.

median_distinct

Gunakan type: median_distinct saat gabungan Anda melibatkan fanout. Fungsi ini menghitung rata-rata nilai yang tidak berulang dalam kolom tertentu, berdasarkan nilai unik yang ditentukan oleh parameter sql_distinct_key. Jika ukuran tidak memiliki parameter sql_distinct_key, Looker akan mencoba menggunakan kolom primary_key.

Pertimbangkan hasil kueri yang menggabungkan tabel Item Pesanan dan Pesanan:

ID Item Pesanan ID Pesanan Pengiriman Pesanan
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50

Dalam situasi ini, Anda dapat melihat bahwa ada beberapa baris untuk setiap pesanan. Kueri ini melibatkan fanout karena setiap pesanan dipetakan ke beberapa item pesanan. median_distinct mempertimbangkan hal ini dan menemukan median antara nilai berbeda 10, 20, dan 50 sehingga Anda akan mendapatkan nilai 20.

Untuk mendapatkan hasil yang akurat, Anda dapat menentukan cara Looker mengidentifikasi setiap entitas unik (dalam hal ini, setiap pesanan unik) menggunakan parameter sql_distinct_key. Formula ini akan menghitung jumlah yang benar:

measure: median_shipping {
  type: median_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Setiap nilai unik sql_distinct_key hanya boleh memiliki satu nilai yang sesuai dalam parameter sql metrik. Dengan kata lain, contoh sebelumnya berfungsi karena setiap baris dengan order_id 1 memiliki order_shipping 10 yang sama, dan setiap baris dengan order_id 2 memiliki order_shipping 20 yang sama.

Kolom type: median_distinct dapat diformat menggunakan parameter value_format atau value_format_name.

Hal-hal yang perlu dipertimbangkan untuk median_distinct

Jenis pengukuran medium_distinct hanya didukung untuk dialek tertentu. Jika median_distinct tidak tersedia untuk dialek, Looker akan menampilkan error. Karena median dapat dianggap sebagai persentil ke-50, error menyatakan bahwa dialek tidak mendukung persentil yang berbeda.

Dialek database yang didukung untuk median_distinct

Agar Looker mendukung jenis median_distinct di project Looker Anda, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek mana yang mendukung jenis median_distinct dalam rilis Looker terbaru:

Dialek Didukung?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

min

type: min menemukan nilai terkecil dalam kolom tertentu. Fungsi ini menggunakan fungsi MIN SQL.

Parameter sql untuk ukuran type: min dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Karena ukuran type: min hanya kompatibel dengan kolom numerik, Anda tidak dapat menggunakan ukuran type: min untuk menemukan tanggal minimum. Sebagai gantinya, Anda dapat menggunakan fungsi MIN() dalam parameter sql dari ukuran type: date untuk mengambil nilai minimum, seperti halnya Anda dapat menggunakan fungsi MAX() dengan ukuran type: date untuk mengambil tanggal maksimum. Hal ini ditunjukkan sebelumnya di halaman ini di bagian date, yang mencakup contoh penggunaan fungsi MAX() dalam parameter sql untuk menemukan tanggal maksimum.

Kolom type: min dapat diformat menggunakan parameter value_format atau value_format_name.

Misalnya, LookML berikut membuat kolom bernama smallest_order dengan melihat dimensi sales_price, lalu menampilkannya dalam format uang ($1.234,56):

measure: smallest_order {
  type: min
  sql: ${sales_price} ;;
  value_format_name: usd
}

Anda tidak dapat menggunakan ukuran type: min untuk string atau tanggal, tetapi Anda dapat menambahkan fungsi MIN secara manual untuk membuat kolom tersebut, seperti ini:

measure: earliest_name_in_alphabet {
  type: string
  sql: MIN(${name}) ;;
}

number

type: number digunakan dengan angka atau bilangan bulat. Ukuran type: number tidak melakukan agregasi apa pun, dan dimaksudkan untuk melakukan transformasi dasar pada ukuran lain. Jika Anda menentukan ukuran yang didasarkan pada ukuran lain, ukuran baru harus berupa type: number untuk menghindari error agregasi bertingkat.

Parameter sql untuk pengukuran type: number dapat mengambil ekspresi SQL valid yang menghasilkan angka atau bilangan bulat.

Kolom type: number dapat diformat menggunakan parameter value_format atau value_format_name.

Misalnya, LookML berikut membuat ukuran yang disebut total_gross_margin_percentage berdasarkan ukuran agregat total_sale_price dan total_gross_margin, lalu menampilkannya dalam format persentase dengan dua desimal (12,34%):

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

measure: total_gross_margin {
  type: sum
  value_format_name: usd
  sql: ${gross_margin} ;;
}

measure: total_gross_margin_percentage {
  type: number
  value_format_name: percent_2
  sql: ${total_gross_margin}/ NULLIF(${total_sale_price},0) ;;
}

Contoh ini juga menggunakan fungsi SQL NULLIF() untuk menghilangkan kemungkinan error pembagian dengan nol.

Hal-hal yang perlu dipertimbangkan untuk type: number

Ada beberapa hal penting yang perlu diingat saat menggunakan pengukuran type: number:

  • Ukuran type: number hanya dapat melakukan aritmatika pada ukuran lain, bukan pada dimensi lain.
  • Agregat simetris Looker tidak akan melindungi fungsi agregat dalam SQL ukuran type: number saat dihitung di seluruh gabungan.
  • Parameter filters tidak dapat digunakan dengan pengukuran type: number, tetapi dokumentasi filters menjelaskan solusinya.
  • Pengukuran type: number tidak akan memberikan saran kepada pengguna.

percent_of_previous

type: percent_of_previous menghitung perbedaan persentase antara sel dan sel sebelumnya dalam kolomnya.

Parameter sql untuk ukuran type: percent_of_previous harus mereferensikan ukuran numerik lain.

Kolom type: percent_of_previous dapat diformat menggunakan parameter value_format atau value_format_name. Namun, format persentase parameter value_format_name tidak berfungsi dengan ukuran type: percent_of_previous. Format persentase ini mengalikan nilai dengan 100, yang memiringkan hasil penghitungan persentase dari sebelumnya.

LookML contoh ini membuat ukuran count_growth yang didasarkan pada ukuran count:

measure: count_growth {
  type: percent_of_previous
  sql: ${count} ;;
}

Perhatikan bahwa nilai percent_of_previous bergantung pada urutan pengurutan. Jika Anda mengubah pengurutan, Anda harus menjalankan ulang kueri untuk menghitung ulang nilai percent_of_previous. Jika kueri di-pivot, percent_of_previous berjalan di seluruh baris, bukan di kolom. Anda tidak dapat mengubah perilaku ini.

Selain itu, metrik percent_of_previous dihitung setelah data ditampilkan dari database Anda. Artinya, Anda tidak boleh mereferensikan ukuran percent_of_previous dalam ukuran lain; karena mungkin dihitung pada waktu yang berbeda, Anda mungkin tidak mendapatkan hasil yang akurat. Artinya juga bahwa metrik percent_of_previous tidak dapat difilter.

Salah satu penerapan jenis pengukuran ini adalah analisis periode ke periode (PoP), yang merupakan pola analisis yang mengukur sesuatu pada saat ini dan membandingkannya dengan pengukuran yang sama dalam jangka waktu yang sebanding di masa lalu. Untuk mengetahui informasi selengkapnya tentang PoP, lihat artikel Komunitas Looker Cara Melakukan Analisis Periode demi Periode dan Metode untuk Analisis Periode demi Periode (PoP) di Looker.

percent_of_total

type: percent_of_total menghitung porsi sel dari total kolom. Persentase dihitung berdasarkan total baris yang ditampilkan oleh kueri Anda, dan bukan total semua kemungkinan baris. Namun, jika data yang ditampilkan oleh kueri Anda melampaui batas baris, nilai kolom akan muncul sebagai null, karena memerlukan hasil lengkap untuk menghitung persentase total.

Parameter sql untuk ukuran type: percent_of_total harus mereferensikan ukuran numerik lain.

Kolom type: percent_of_total dapat diformat menggunakan parameter value_format atau value_format_name. Namun, format persentase parameter value_format_name tidak berfungsi dengan ukuran type: percent_of_total. Format persentase ini mengalikan nilai dengan 100, yang akan memiringkan hasil penghitungan percent_of_total.

LookML contoh ini membuat ukuran percent_of_total_gross_margin yang didasarkan pada ukuran total_gross_margin:

measure: percent_of_total_gross_margin {
  type: percent_of_total
  sql: ${total_gross_margin} ;;
}

Jika kueri di-pivot, percent_of_total berjalan di seluruh baris, bukan di kolom. Jika Anda tidak menginginkan hal ini, tambahkan direction: "column" ke definisi pengukuran.

Selain itu, metrik percent_of_total dihitung setelah data ditampilkan dari database Anda. Artinya, Anda tidak boleh mereferensikan ukuran percent_of_total dalam ukuran lain; karena mungkin dihitung pada waktu yang berbeda, Anda mungkin tidak mendapatkan hasil yang akurat. Artinya juga bahwa metrik percent_of_total tidak dapat difilter.

percentile

type: percentile menampilkan nilai pada persentil nilai yang ditentukan dalam kolom tertentu. Misalnya, menentukan persentil ke-75 akan menampilkan nilai yang lebih besar dari 75% nilai lainnya dalam set data.

Untuk mengidentifikasi nilai yang akan ditampilkan, Looker menghitung jumlah total nilai data dan mengalikan persentil yang ditentukan dengan jumlah total nilai data. Terlepas dari bagaimana data sebenarnya diurutkan, Looker mengidentifikasi urutan relatif nilai data dalam nilai yang meningkat. Nilai data yang ditampilkan Looker bergantung pada apakah hasil penghitungan berupa bilangan bulat atau tidak, seperti yang dibahas di dua bagian berikut.

Jika nilai yang dihitung bukan bilangan bulat

Looker membulatkan nilai yang dihitung dan menggunakannya untuk mengidentifikasi nilai data yang akan ditampilkan. Dalam contoh kumpulan 19 skor tes ini, persentil ke-75 akan diidentifikasi dengan 19 * 0,75 = 14,25, yang berarti bahwa 75% nilai berada dalam 14 nilai data pertama -- di bawah posisi ke-15. Dengan demikian, Looker menampilkan nilai data ke-15 (87) sebagai lebih besar dari 75% nilai data.

Jika nilai yang dihitung adalah bilangan bulat

Dalam kasus yang sedikit lebih rumit ini, Looker menampilkan rata-rata nilai data pada posisi tersebut dan nilai data berikutnya. Untuk memahaminya, pertimbangkan sekumpulan 20 skor pengujian: Persentil ke-75 akan diidentifikasi dengan 20 * 0,75 = 15, yang berarti bahwa nilai data pada posisi ke-15 adalah bagian dari persentil ke-75, dan kita perlu menampilkan nilai yang lebih tinggi dari 75% nilai data. Dengan menampilkan rata-rata nilai di posisi ke-15 (82) dan posisi ke-16 (87), Looker memastikan bahwa 75%. Rata-rata tersebut (84,5) tidak ada dalam set nilai data, tetapi akan lebih besar dari 75% nilai data.

Parameter wajib dan opsional

Gunakan kata kunci percentile: untuk menentukan nilai pecahan, yang berarti persentase data yang harus berada di bawah nilai yang ditampilkan. Misalnya, gunakan percentile: 75 untuk menentukan nilai pada persentil ke-75 dalam urutan data, atau percentile: 10 untuk menampilkan nilai pada persentil ke-10. Jika ingin menemukan nilai pada persentil ke-50, Anda dapat menentukan percentile: 50 atau cukup menggunakan jenis median.

Parameter sql untuk ukuran type: percentile dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Kolom type: percentile dapat diformat menggunakan parameter value_format atau value_format_name.

Contoh

Misalnya, LookML berikut membuat kolom bernama test_scores_75th_percentile yang menampilkan nilai pada persentil ke-75 dalam dimensi test_scores:

measure: test_scores_75th_percentile {
  type: percentile
  percentile: 75
  sql: ${TABLE}.test_scores ;;
}

Hal-hal yang perlu dipertimbangkan untuk percentile

Jika Anda menggunakan percentile untuk kolom yang terlibat dalam fanout, Looker akan mencoba menggunakan percentile_distinct. Jika percentile_distinct tidak tersedia untuk dialek, Looker akan menampilkan error. Untuk mengetahui informasi selengkapnya, lihat dialek yang didukung untuk percentile_distinct.

Dialek database yang didukung untuk percentile

Agar Looker mendukung jenis percentile di project Looker Anda, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek mana yang mendukung jenis percentile dalam rilis Looker terbaru:

Dialek Didukung?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

percentile_distinct

type: percentile_distinct adalah bentuk khusus persentil dan harus digunakan saat gabungan Anda melibatkan fanout. Fungsi ini menggunakan nilai yang tidak berulang dalam kolom tertentu, berdasarkan nilai unik yang ditentukan oleh parameter sql_distinct_key. Jika ukuran tidak memiliki parameter sql_distinct_key, Looker akan mencoba menggunakan kolom primary_key.

Pertimbangkan hasil kueri yang menggabungkan tabel Item Pesanan dan Pesanan:

ID Item Pesanan ID Pesanan Pengiriman Pesanan
1 1 10
2 1 10
3 2 20
4 3 50
5 3 50
6 3 50
7 4 70
8 4 70
9 5 110
10 5 110

Dalam situasi ini, Anda dapat melihat bahwa ada beberapa baris untuk setiap pesanan. Kueri ini melibatkan fanout karena setiap pesanan dipetakan ke beberapa item pesanan. percentile_distinct mempertimbangkan hal ini dan menemukan nilai persentil menggunakan nilai unik 10, 20, 50, 70, dan 110. Persentil ke-25 akan menampilkan nilai berbeda kedua, atau 20, sedangkan persentil ke-80 akan menampilkan rata-rata nilai berbeda keempat dan kelima, atau 90.

Parameter wajib dan opsional

Gunakan kata kunci percentile: untuk menentukan nilai pecahan. Misalnya, gunakan percentile: 75 untuk menentukan nilai pada persentil ke-75 dalam urutan data, atau percentile: 10 untuk menampilkan nilai pada persentil ke-10. Jika Anda mencoba menemukan nilai pada persentil ke-50, Anda dapat menggunakan jenis median_distinct sebagai gantinya.

Untuk mendapatkan hasil yang akurat, tentukan cara Looker mengidentifikasi setiap entity unik (dalam hal ini, setiap pesanan unik) dengan menggunakan parameter sql_distinct_key.

Berikut adalah contoh penggunaan percentile_distinct untuk menampilkan nilai pada persentil ke-90:

measure: order_shipping_90th_percentile {
  type: percentile_distinct
  percentile: 90
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Setiap nilai unik sql_distinct_key hanya boleh memiliki satu nilai yang sesuai dalam parameter sql metrik. Dengan kata lain, contoh sebelumnya berfungsi karena setiap baris dengan order_id 1 memiliki order_shipping 10 yang sama, dan setiap baris dengan order_id 2 memiliki order_shipping 20 yang sama.

Kolom type: percentile_distinct dapat diformat menggunakan parameter value_format atau value_format_name.

Hal-hal yang perlu dipertimbangkan untuk percentile_distinct

Jika percentile_distinct tidak tersedia untuk dialek, Looker akan menampilkan error. Untuk mengetahui informasi selengkapnya, lihat dialek yang didukung untuk percentile_distinct.

Dialek database yang didukung untuk percentile_distinct

Agar Looker mendukung jenis percentile_distinct di project Looker Anda, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek mana yang mendukung jenis percentile_distinct dalam rilis Looker terbaru:

Dialek Didukung?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

period_over_period

Untuk dialek yang mendukung pengukuran dari periode ke periode, Anda dapat membuat ukuran LookML type: period_over_period untuk membuat ukuran dari periode ke periode (PoP). Pengukuran PoP merujuk pada penggabungan dari jangka waktu sebelumnya.

Berikut adalah contoh pengukuran PoP yang memberikan jumlah pesanan bulan sebelumnya:

  measure: orders_last_month {
    type: period_over_period
    based_on: orders.count
    based_on_time: orders.created_month
    period: month
    kind: previous
  }

Pengukuran dengan type: period_over_period juga harus memiliki subparameter berikut:

Lihat Pengukuran perbandingan periode di Looker untuk mengetahui informasi dan contoh selengkapnya.

running_total

type: running_total menghitung jumlah kumulatif sel di sepanjang kolom. Fungsi ini tidak dapat digunakan untuk menghitung jumlah di sepanjang baris, kecuali jika baris tersebut dihasilkan dari pivot.

Parameter sql untuk ukuran type: running_total harus mereferensikan ukuran numerik lain.

Kolom type: running_total dapat diformat menggunakan parameter value_format atau value_format_name.

Contoh LookML berikut membuat ukuran cumulative_total_revenue yang didasarkan pada ukuran total_sale_price:

measure: cumulative_total_revenue {
  type: running_total
  sql: ${total_sale_price} ;;
  value_format_name: usd
}

Perhatikan bahwa nilai running_total bergantung pada urutan pengurutan. Jika Anda mengubah pengurutan, Anda harus menjalankan ulang kueri untuk menghitung ulang nilai running_total. Jika kueri di-pivot, running_total berjalan di seluruh baris, bukan di kolom. Jika Anda tidak menginginkan hal ini, tambahkan direction: "column" ke definisi pengukuran.

Selain itu, metrik running_total dihitung setelah data ditampilkan dari database Anda. Artinya, Anda tidak boleh mereferensikan ukuran running_total dalam ukuran lain; karena mungkin dihitung pada waktu yang berbeda, Anda mungkin tidak mendapatkan hasil yang akurat. Artinya juga bahwa metrik running_total tidak dapat difilter.

string

type: string digunakan dengan kolom yang berisi huruf atau karakter khusus.

Parameter sql untuk pengukuran type: string dapat mengambil ekspresi SQL valid yang menghasilkan string. Pada praktiknya, jenis ini jarang digunakan, karena sebagian besar fungsi agregat SQL tidak menampilkan string. Salah satu pengecualian umum adalah fungsi GROUP_CONCAT MySQL, meskipun Looker menyediakan type: list untuk kasus penggunaan tersebut.

Misalnya, LookML berikut membuat kolom category_list dengan menggabungkan nilai unik dari kolom bernama category:

measure: category_list {
  type: string
  sql: GROUP_CONCAT(${category}) ;;
}

Dalam contoh ini, type: string dapat dihilangkan, karena string adalah nilai default untuk type.

sum

type: sum menjumlahkan nilai dalam kolom tertentu. Fungsi ini mirip dengan fungsi SUM SQL. Namun, tidak seperti SQL mentah, Looker akan menghitung jumlah dengan benar meskipun gabungan kueri Anda berisi fanout.

Parameter sql untuk ukuran type: sum dapat mengambil ekspresi SQL valid yang menghasilkan kolom tabel numerik, dimensi LookML, atau kombinasi dimensi LookML.

Kolom type: sum dapat diformat menggunakan parameter value_format atau value_format_name.

Misalnya, LookML berikut membuat kolom bernama total_revenue dengan menjumlahkan dimensi sales_price, lalu menampilkannya dalam format uang ($1.234,56):

measure: total_revenue {
  type: sum
  sql: ${sales_price} ;;
  value_format_name: usd
}

sum_distinct

type: sum_distinct digunakan dengan set data yang tidak dinormalisasi. Fungsi ini menjumlahkan nilai yang tidak berulang dalam kolom tertentu, berdasarkan nilai unik yang ditentukan oleh parameter sql_distinct_key.

Ini adalah konsep lanjutan yang mungkin lebih jelas dijelaskan dengan contoh. Pertimbangkan tabel yang tidak dinormalisasi seperti ini:

ID Item Pesanan ID Pesanan Pengiriman Pesanan
1 1 10,00
2 1 10,00
3 2 20.00
4 2 20.00
5 2 20.00

Dalam situasi ini, Anda dapat melihat bahwa ada beberapa baris untuk setiap pesanan. Akibatnya, jika Anda menambahkan ukuran type: sum untuk kolom order_shipping, Anda akan mendapatkan total 80.00, meskipun total pengiriman yang dikumpulkan sebenarnya adalah 30.00.

 # Will NOT calculate the correct shipping amount
measure: total_shipping {
  type: sum
  sql: ${order_shipping} ;;
}

Untuk mendapatkan hasil yang akurat, Anda dapat menentukan cara Looker mengidentifikasi setiap entitas unik (dalam hal ini, setiap pesanan unik) menggunakan parameter sql_distinct_key. Ini akan menghitung jumlah 30.00 yang benar:

 # Will calculate the correct shipping amount
measure: total_shipping {
  type: sum_distinct
  sql_distinct_key: ${order_id} ;;
  sql: ${order_shipping} ;;
}

Setiap nilai unik sql_distinct_key hanya boleh memiliki satu nilai yang sesuai di sql. Dengan kata lain, contoh sebelumnya berfungsi karena setiap baris dengan order_id 1 memiliki order_shipping yang sama, yaitu 10.00, dan setiap baris dengan order_id 2 memiliki order_shipping yang sama, yaitu 20.00.

Kolom type: sum_distinct dapat diformat menggunakan parameter value_format atau value_format_name.

yesno

type: yesno membuat kolom yang menunjukkan apakah sesuatu benar atau salah. Nilai muncul sebagai Ya dan Tidak di UI Explore.

Parameter sql untuk ukuran type: yesno mengambil ekspresi SQL valid yang dievaluasi menjadi TRUE atau FALSE. Jika kondisi bernilai TRUE, Ya ditampilkan kepada pengguna; jika tidak, Tidak ditampilkan.

Ekspresi SQL untuk ukuran type: yesno hanya boleh menyertakan agregasi, yang berarti agregasi SQL atau referensi ke ukuran LookML. Jika Anda ingin membuat kolom yesno yang menyertakan referensi ke dimensi LookML atau ekspresi SQL yang bukan merupakan agregasi, gunakan dimensi dengan type: yesno, bukan ukuran.

Mirip dengan ukuran dengan type: number, ukuran dengan type: yesno tidak melakukan agregasi apa pun; ukuran ini hanya merujuk pada agregasi lain.

Misalnya, contoh ukuran total_sale_price berikut adalah jumlah total harga penjualan item pesanan dalam pesanan. Ukuran kedua yang disebut is_large_total adalah type: yesno. Pengukuran is_large_total memiliki parameter sql yang mengevaluasi apakah nilai total_sale_price lebih besar dari $1.000.

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
  drill_fields: [detail*]
}
measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}

Jika ingin mereferensikan kolom type: yesno di kolom lain, Anda harus memperlakukan kolom type: yesno sebagai boolean (dengan kata lain, seolah-olah sudah berisi nilai benar atau salah). Contoh:

measure: is_large_total {
  description: "Is order total over $1000?"
  type: yesno
  sql: ${total_sale_price} > 1000 ;;
}
# This is correct:
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} THEN 200 ELSE 100 END ;;
}
# This is NOT correct:
measure: reward_points {
  type: number
  sql: CASE WHEN ${is_large_total} = 'Yes' THEN 200 ELSE 100 END ;;
}