First Touch vs Last Touch Attribution di SQL
Blog/Tutorial SQL/First Touch vs Last Touch Attribution di SQL

First Touch vs Last Touch Attribution di SQL

BimaBima
·20 Desember 2026·12 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

First touch attribution ngasih seluruh kredit konversi ke channel pertama yang narik pelanggan, sedangkan last touch ngasih ke channel terakhir sebelum konversi. Di SQL, kamu hitung keduanya pakai window function FIRST_VALUE dan LAST_VALUE yang di-partisi per pelanggan dan diurutkan waktu. Pilihan model ini menentukan channel mana yang kelihatan paling berjasa, jadi pengaruhi keputusan alokasi budget marketing.

First touch attribution ngasih seluruh kredit konversi ke channel pertama yang narik pelanggan. Last touch ngasih ke channel terakhir sebelum mereka beli.

Dua model ini jawab pertanyaan yang sama dengan cara beda: dari sekian channel yang disentuh pelanggan sebelum konversi, mana yang paling berjasa? Pilihanmu ngaruh ke cara kamu bagi budget iklan. Aku bakal tunjukin cara hitung keduanya di SQL pakai window function.

Apa itu attribution dalam marketing?

Attribution adalah cara ngasih kredit konversi ke satu atau beberapa channel yang pelanggan sentuh sebelum beli. Satu pelanggan bisa lihat iklan Instagram, klik email, lalu cari di Google sebelum akhirnya konversi. Attribution nentuin channel mana yang dapat pujian atas penjualan itu. Model yang beda kasih jawaban yang beda.

Ini penting karena budget marketing terbatas. Kalau kamu kira Google yang bikin orang beli padahal Instagram yang narik mereka pertama, kamu bisa salah alokasi dana. Attribution bantu kamu lihat peran tiap channel lebih jelas.

Apa beda first touch dan last touch?

First touch attribution ngasih 100% kredit ke channel pertama dalam perjalanan pelanggan, yang narik mereka kenal brand. Last touch ngasih 100% kredit ke channel terakhir sebelum konversi, yang nutup penjualan. First touch fokus ke penarik perhatian awal, last touch ke pendorong keputusan akhir.

AspekFirst TouchLast Touch
Kredit keChannel pertamaChannel terakhir
Jawab pertanyaanSiapa narik pelanggan?Siapa nutup penjualan?
Cocok buatUkur brand awarenessUkur channel konversi
KelemahanAbaikan channel penutupAbaikan channel penarik

Keduanya model sederhana yang cuma ngasih kredit ke satu channel. Ada model lebih rumit yang bagi kredit ke semua channel, tapi first dan last touch jadi titik awal yang paling gampang dihitung.

Data apa yang dibutuhkan?

Kamu butuh tabel touchpoint yang nyatet tiap interaksi pelanggan dengan channel, plus waktunya. Minimal tiga kolom: ID pelanggan, channel, dan waktu. Tiap baris satu sentuhan.

user_idchannelwaktu
7Instagram2026-12-01 09:00
7Email2026-12-03 14:00
7Google2026-12-05 20:00

Buat pelanggan 7 di atas, first touch-nya Instagram dan last touch-nya Google. Kamu juga butuh tabel konversi buat tau pelanggan mana yang akhirnya beli.

Gimana hitung first dan last touch di SQL?

Cara hitung first dan last touch di SQL adalah pakai window function FIRST_VALUE dan LAST_VALUE. Keduanya ngambil nilai pertama dan terakhir dari sebuah kolom dalam kelompok, di sini dikelompokkan per pelanggan dan diurutkan berdasarkan waktu. Hasilnya, tiap pelanggan dapat channel pertama dan terakhirnya.

SELECT DISTINCT
  user_id,
  FIRST_VALUE(channel) OVER (
    PARTITION BY user_id
    ORDER BY waktu
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  ) AS first_touch,
  LAST_VALUE(channel) OVER (
    PARTITION BY user_id
    ORDER BY waktu
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  ) AS last_touch
FROM touchpoints
WHERE user_id IN (SELECT user_id FROM konversi);

PARTITION BY user_id ngelompokin sentuhan per pelanggan. ORDER BY waktu ngurutin dari yang paling awal ke akhir. Bagian ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING penting banget buat LAST_VALUE.

Kenapa LAST_VALUE butuh frame khusus?

LAST_VALUE gampang salah kalau frame window-nya nggak diatur. Secara default, window function pakai frame yang cuma nyampe baris saat ini, bukan seluruh kelompok. Akibatnya LAST_VALUE malah balikin nilai baris sekarang, bukan yang beneran terakhir.

Makanya kamu perlu ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Ini maksa window ngelihat semua baris dalam kelompok, dari yang paling awal sampai paling akhir. Baru LAST_VALUE balikin channel terakhir yang benar. Dokumentasi window function PostgreSQL ngejelasin perilaku frame ini lebih detail.

Alternatifnya, kamu bisa pakai ROW_NUMBER buat nomorin sentuhan lalu ambil yang pertama dan terakhir. Tapi FIRST_VALUE dan LAST_VALUE lebih ringkas buat kasus ini. Kalau mau paham beda ROWS dan RANGE, baca window frame ROWS vs RANGE.

Contoh kasus: attribution toko_berkah

Aku jalanin analisa ini di data toko_berkah, toko online sembako. Ada 1.850 pelanggan yang konversi dalam 90 hari, dengan rata-rata 3,2 sentuhan channel sebelum beli.

ChannelKredit First TouchKredit Last Touch
Instagram780310
Google520690
Email310560
Langsung240290

Insight terkuatnya: Instagram dapat 780 kredit first touch tapi cuma 310 last touch. Artinya Instagram jago narik pelanggan baru, tapi jarang jadi channel penutup. Sebaliknya, Email dan Google lebih sering nutup penjualan.

Kalau toko_berkah cuma pakai last touch, mereka bakal ngurangin budget Instagram karena kelihatan kurang berjasa. Padahal Instagram yang narik 42% pelanggan pertama kali. Ini bahaya andalin satu model doang. Dua sudut pandang kasih gambaran lebih jujur soal peran tiap channel.

Kesalahan umum

Kesalahan pertama: lupa atur frame di LAST_VALUE. Tanpa ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING, hasilnya salah dan kamu nggak bakal ngeh. Selalu set frame eksplisit buat LAST_VALUE.

Kesalahan kedua: nggak filter ke pelanggan yang konversi aja. Kalau semua touchpoint dihitung termasuk yang nggak beli, attribution jadi ngaco. Attribution cuma relevan buat perjalanan yang berakhir konversi.

Kesalahan ketiga: nganggap satu model attribution itu kebenaran mutlak. First dan last touch cuma dua sudut pandang. Bandingin keduanya, jangan andalin satu. Model penuh yang bagi kredit ke semua sentuhan sering lebih adil buat keputusan besar.

Kapan pakai first touch atau last touch?

Pakai first touch saat kamu mau ukur channel mana yang paling jago narik pelanggan baru dan bangun awareness. Pakai last touch saat kamu fokus ke channel mana yang paling efektif nutup penjualan. Kalau bingung, hitung keduanya dan bandingin, kayak contoh toko_berkah di atas.

Buat keputusan budget yang serius, banyak tim naik ke model multi-touch yang bagi kredit ke semua channel. Tapi buat mulai dan buat toko kecil, first dan last touch udah cukup buat lihat pola. Gabungin sama analisa conversion rate biar kamu tau nggak cuma channel apa, tapi seberapa efektif tiap channel ngubah kunjungan jadi penjualan.

FAQ

Apa itu first touch attribution?

First touch attribution ngasih seluruh kredit konversi ke channel pertama yang pelanggan sentuh dalam perjalanan mereka. Kalau seseorang pertama kenal brand lewat Instagram lalu akhirnya beli, Instagram dapat 100% kredit. Model ini fokus ke channel yang narik perhatian awal, cocok buat ngukur usaha brand awareness. Kelemahannya, channel yang nutup penjualan diabaikan.

Kenapa LAST_VALUE ngasih hasil yang salah?

Karena frame default window function cuma nyampe baris saat ini, bukan seluruh kelompok. Jadi LAST_VALUE malah balikin nilai baris sekarang. Perbaikannya, tambah ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING di klausa OVER. Ini maksa window ngelihat semua baris dalam partisi, jadi LAST_VALUE balikin channel terakhir yang benar.

Lebih baik pakai first touch atau last touch?

Nggak ada yang mutlak lebih baik, keduanya jawab pertanyaan berbeda. First touch bagus buat ngukur channel penarik pelanggan baru. Last touch bagus buat ngukur channel penutup penjualan. Idealnya, hitung keduanya dan bandingin. Channel yang kuat di first touch tapi lemah di last touch berarti jago narik, bukan nutup. Dua sudut ini kasih gambaran lebih lengkap.

Bisa hitung attribution tanpa window function?

Bisa, pakai subquery dengan MIN dan MAX waktu lalu JOIN balik ke tabel touchpoint. Tapi caranya lebih panjang dan gampang salah. Window function seperti FIRST_VALUE dan LAST_VALUE lebih ringkas dan langsung buat tujuan ini. Kalau database-mu dukung window function, itu jalur yang paling bersih dan gampang dibaca.

Apa bedanya last touch dan multi-touch attribution?

Last touch ngasih semua kredit ke satu channel terakhir. Multi-touch bagi kredit ke semua channel dalam perjalanan pelanggan, misalnya rata atau berdasarkan bobot posisi. Multi-touch lebih adil karena ngakuin tiap sentuhan berperan, tapi lebih rumit dihitung. Buat mulai, last touch cukup. Buat keputusan budget besar, multi-touch kasih gambaran lebih akurat.

Penutup

Tiga hal inti soal first touch vs last touch attribution di SQL.

  • First touch kasih kredit ke channel penarik, last touch ke channel penutup.
  • Hitung keduanya pakai FIRST_VALUE dan LAST_VALUE dengan partisi per pelanggan.
  • Jangan lupa frame ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING buat LAST_VALUE.

Mau lanjut ngukur efektivitas channel lebih dalam? Pelajari cara hitung conversion rate biar tau seberapa jago tiap channel ngubah kunjungan jadi beli. Kuatin juga dasar window function lewat window frame ROWS vs RANGE yang jadi kunci query attribution ini.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
Tutorial SQL
29 Desember 2026•9 menit baca

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)

NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.

BimaBima
Running Max dan Min dengan Window Function SQL
Tutorial SQL
26 Desember 2026•11 menit baca

Running Max dan Min dengan Window Function SQL

Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.

BimaBima
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Tutorial SQL
23 Desember 2026•12 menit baca

Analisa Afinitas Produk (Cross-Sell) dengan SQL

Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore