Anda di halaman 1dari 46

PERBANDINGAN EFEKTIFITAS RUNNING TIME

EXECUTION DAN MANAJEMEN MEMORI


MENGGUNAKAN VIEW METHOD DAN ETL
METHOD DI PT DIMA INDONESIA

LAPORAN KEGIATAN
MAGANG KAMPUS MERDEKA

Oleh:
Julius Christian Simatupang
105220012

PROGRAM STUDI ILMU KOMPUTER


FAKULTAS SAINS DAN KOMPUTER
UNIVERSITAS PERTAMINA
2023
LEMBAR PERSETUJUAN LAPORAN KEGIATAN
MAGANG KAMPUS MERDEKA

Judul Kegiatan : Perbandingan Efektivitas Running Time dan Manajemen


Memori Menggunakan View Method dan ELT Method di PT
Dima Indonesia

Jenis Kegiatan : Magang atau Kerja Praktik

Nama Mahasiswa : Julius Christian Simatupang

Nomor Induk Mahasiswa : 105220012

Program Studi : Ilmu Komputer

Fakultas : Sains dan Ilmu Komputer

Tanggal Seminar : 1 September 2023

Jakarta,.
MENYETUJUI,

Pembimbing Instansi Pembimbing Program Studi

Eddy Febrianto Muhammad Zaki Almuzakki, S.Si.M.Si., M.Sc.


NIP. 116019

i
Surat Tugas Magang/Praktik Kerja

ii
Abstrak

Magang Kampus Merdeka merupakan suatu program yang diselenggarakan oleh Kementerian
Pendidikan dan Kebudayaan sebagai wadah bagi para mahasiswa untuk mengenal dunia kerja
secara lebih nyata dan mendalam. Program Magang Kampus Merdeka yang berjalan kurang
lebih 6 bulan ini bekerja sama dengan berbagai mitra perusahaan, salah satunya PT Dima
Indonesia atau lebih dikenal dengan Dima Group. PT Dima Indonesia merupakan perusahaan
distributor makanan dan minuman yang dirintis dari tahun 1950an dan didirikan di Jakarta pada
tahun 1953. Lingkup usaha yang dilakukan oleh PT Dima Indonesia meliputi usaha distribusi,
produksi, dan marketing promotion. Implementasi sistem pada perusahaan, salah satunya adalah
sistem BOSNET Analysis System. Sebagai bentuk pemantauan sales terhadap produk yang telah
dijual ke toko di seluruh wilayah Indonesia, dibentuklah strategi pemasaran salah satunya
melalui media situs web dan aplikasi yang dimiliki. Untuk meningkatkan jumlah penjualan
menjadi prospek utama dalam perusahaan sehingga sistem database yang dibangun secara
terstruktur agar efisien dan efektif dalam pengolahan dan penambilan data. Project pembangunan
struktur database dan pembuatan query penarikan laporan menjadi salah satu project
yangdikerjakan selama program MSIB berlangsung. Hasil dari project ini membuktikan bahwa
pembangunan struktur data yang baik dan pembuatan query yang efisien merupakan hal penting
yang perlu diperhatikan oleh perusahaan. Melalui kesempatan ini pula, dapat diambil banyak
pengetahuan baru sekaligus pengalaman berharga dalam menyelesaikan tantangan dalam dunia
kerja secara nyata.

Kata kunci : Magang Kampus Merdeka, Query, PT Dima Indonesia, Database, Analysis
System.

iii
Kata Pengantar

Puji syukur kepada Tuhan Yang Maha Esa yang telah memberikan rahmat dan hidayahNya
sehingga penulis dapat menyelesaikan Laporan Akhir Magang dan Studi Independen
Bersertifikat ini tepat pada waktunya. Dalam penyusunan Laporan Akhir Magang dan Studi
Independen Bersertifikat ini penulis mengucapkan terima kasih atas bimbingan, bantuan dan
dukungan yang telah diberikan kepada :
1. Tuhan Yang Maha Esa sebagai pemberi rahmat dan hidayah kepada penulis sehingga mampu
menyelesaikan laporan ini.
2. Kedua Orang Tua dan adik penulis yang selalu mendoakan, mendukung, memberikan
semangat serta menjadi motivasi terbesar penulis dalam menyelesaikan laporan ini.
3. Bapak Benny Irawan selaku Senior Manager PT Dima Indonesia yang sudah memberikan
kesempatan magang dan bergabung serta memberikan banyak ilmu dan pengetahuan baru
kepada penulis.
4. Bapak Ade Irawan, Ph.D selaku Ketua Progam Studi Ilmu Komputer Universitas Pertamina.
5. Bapak Muhammad Zaki Almuzakki, S.Si.M.Si.,M.Sc selaku dosen pembimbing dan dosen
wali yang telah memberikan ilmu, nasihat, arahan serta sabar saat membimbing penulis
selama pengerjaan Laporan Akhir Magang.
6. Rekan kerja di divisi IT Bosnet yang selalu memberikan arahan dan bimbingan dalam
pekerjaan serta selalu mendukung kegiatan penulis yaitu Pak Teddy dan Pak Irwi.
7. Mentor saya di divisi IT Bosnet yang selalu hadir dalam memberikan bimbingan dan ilmu
yaitu Pak Eddy Febrianto.
8. Teman - teman terdekat satu divisi IT Bosnet yaitu Pak Boni yang selalu mengingatkan
penulis dalam hal apapun.
9. Rekan-rekan operasional yaitu Pak Ricky, Pak Yopi, Pak Yaser, Pak Luis yang telah saling
memberikan dukungan dan membuat lingkungan kerja menjadi nyaman selama program
magang berlangsung
10. Rekan-rekan Data Analyst yaitu Bu Susan, Bu Patricia, Bu Maria, Pak Soni, Pak Tulus yang
selalu mendukung dan memberikan pelajaran baru dalam cara menganalisis data serta

iv
membuat lingkungan kerja menjadi nyaman selama magang di kantor Indofood Tower

11. Semua pihak yang tidak bisa disebutkan satu per satu yang telah membantu penulis hingga
terselesaikannya Laporan Magang dan Magang Kampus Merdeka
12. Penulis menyadari bahwa laporan yang telah ditulis ini masih jauh dari kata sempurna. Oleh karena
itu, kritik dan saran yang membangun akan penulis nantikan demi kesempurnaan laporan ini.

v
Daftar Istilah

Data Engineer Pekerjaan dalam bidang data untuk


mengatur infrastruktur data, mengumpulkan
data dan pemeliharaan data.
Query Perintah yang berfungsi untuk mengakses,
memanggil, mengatur data dalam sistem
database.
View Method Metode dalam sql yang menyimpan query
menjadi satu tabel.
ETL Method Extract Transform Load adalah Metode
dalam pengolahan data yang mengolah data
terlebih dahulu lalu mengunggah data
tersebut.
Select Rekursif CTE Salah satu bentuk query sql untuk
menyederhanakan JOIN pada SQL ke dalam
subqueries yang bersifat hirarki.
Database Sekumpulan informasi data yang disimpan
dalam satu komputer secara sistematis.
Website Suatu halaman publik yang dapat diakses
oleh seluruh masyarakat umum secara
online
Data Grid Tampilan beberapa data dalam bentuk grid
(baris dan kolom)
Running Time Execution Sistem perhitungan waktu dalam
mengeksekusi query pada sistem mysql.
Join Table Proses penggabungan data yang sering
digunakan pada penulisan query untuk
mendapatkan data yang diperlukan yang
berasal dari tabel lain.
Journey Plan Suatu sistem data yang mengatur daftar
kunjungan secara otomatis kepada sales dan
mendata apakah pelanggan sudah didatangi
oleh sales atau tidak dengan mengupload
beberapa data untuk di validasi.

vi
Daftar Isi

LEMBAR PERSETUJUAN LAPORAN KEGIATAN .............................................................. i


MAGANG KAMPUS MERDEKA ............................................................................................... i
Surat Tugas Magang/Praktik Kerja ........................................................................................... ii
Abstrak.......................................................................................................................................... iii
Kata Pengantar ............................................................................................................................ iv
Daftar Istilah ................................................................................................................................ vi
Daftar Isi ...................................................................................................................................... vii
Daftar Gambar ........................................................................................................................... viii
Daftar Lampiran ........................................................................................................................... x
Bab I Pendahuluan ...................................................................................................................... 1
I.1 Latar belakang ............................................................................................................ 1
I.2 Lingkup........................................................................................................................ 1
I.3 Tujuan.......................................................................................................................... 2
Bab II PT Dima Indonesia ........................................................................................................... 3
II.1 Lingkup Pekerjaan .................................................................................................... 3
II.2 Deskripsi Pekerjaan ................................................................................................... 3
II.3 Jadwal Kerja .............................................................................................................. 4
BAB III PERBANDINGAN EFEKTIFITAS RUNNING TIME EXECUTION DAN
MANAJEMEN MEMORI MENGGUNAKAN VIEW METHOD DAN ETL METHOD DI
PT DIMA INDONESIA ................................................................................................................ 6
III.1 Analisis Running Time Execution ETL Method ....................................................... 6
III.2 Perancangan Method Baru dalam Pembuatan Query ............................................ 7
III.3 Analisa Perbandingan Execution Running Time.................................................... 9
Bab IV Penutup ........................................................................................................................... 11
IV.1 Kesimpulan ............................................................................................................... 11
IV.2 Saran ......................................................................................................................... 11
Referensi............................................................................................................................. 12
Lampiran ..................................................................................................................................... 13

vii
Daftar Algoritma

Algoritma 3.1 SQL Query menggunakan ETL Method............................................................ 7


Algoritma 3.2 SQL Query menggunakan Select CTE Rekursif Method ................................ 8
Algoritma 3.3 SQL Query menggunakan View Method ........................................................... 9

viii
Daftar Tabel

Tabel 3.1 Tabel perbandingan running time .............................................................................. 9

ix
Daftar Lampiran
Lampiran I. Log Activity ........................................................................................................... 13
Lampiran II. Bukti Proses Running Data menggunakan metode ETL ................................. 20
Lampiran III. Bukti Proses Running Data menggunakan metode CTE Rekursif ............... 23
Lampiran IV. Bukti Proses Running Data menggunakan metode View ............................... 26
Lampiran V. Query Data View ................................................................................................... 26

x
xi
Bab I Pendahuluan

I.1 Latar belakang


Magang Kampus Merdeka merupakan suatu program yang diselenggarakan oleh
Kementerian Pendidikan dan Kebudayaan sebagai wadah bagi para mahasiswa untuk
mengenal dunia kerja secara lebih nyata dan mendalam. Hal ini juga selaras dengan kebijakan
kampus yang mengadakan mata kuliah “Kerja Praktik” untuk memberikan kesempatan bagi
mahasiswanya untuk mengimplementasikan ilmu yang telah didapatkan semasa perkuliahan.
Program Magang Kampus Merdeka ini bekerja sama dengan berbagai mitra perusahaan, salah
satunya PT Dima Indonesia atau lebih dikenal dengan Dima Group. PT Dima Indonesia
merupakan perusahaan distribusi makanan dan minuman yang didirikan di Jakarta pada 1953.
Berangkat dari kesadaran akan pentingnya produktivitas dan efisiensi perusahaan, Dima Group
mengambil langkah untuk mengembangkan sistem website dan sistem database yang baik
sehingga dapat mengotomatisasi keseluruhan transaksi proses bisnis pada perusahaan. Melalui
program Magang Kampus Merdeka ini, Dima Group bertekad untuk mengembangkan
ketertarikan generasi muda pada bidang teknologi dan informasi sehingga dapat berkontribusi
dalam meningkatkan ketersediaan jumlah talenta digital Indonesia.

I.2 Lingkup
Project yang dikerjakan selama berada di PT Dima Indonesia mencakup pengefisiensikan
struktur database perusahaan dan pembuatan query dalam pembuatan laporan dan penarikan
laporan data perusahaan. Selain itu terdapat beberapa proyek yang dilakukan untuk
pengembangan dan pemeliharaan perusahaan rintisan, baik dari segi produk maupun pemasaran.
Adapun dalam pelaksanaannya, PT Dima Indonesia membagi timnya menjadi 11 divisi. Divisi
tersebut di antaranya adalah

1. Accounting & Finance


2. Planning Marketing
3. Business Risk Management
4. IT Departmenet
5. Operational System

1
6. Product Designer
7. Sales Management
8. System Manufactoring
9. Business Unit Management
10. Distribution
11. Product Analyst

I.3 Tujuan
Adapun tujuan yang akan diperoleh dari program Magang Kampus Merdeka ini adalah sebagai
berikut
1. Mendapatkan kesempatan bagi para mahasiswa untuk mengenal dunia kerjasecara lebih
dekat dan nyata
2. Memiliki gambaran bagi para mahasiswa terkait hak dan kewajiban seorangkaryawan
terutama untuk setiap posisi kerjanya masing-masing
3. Mendapatkan kesempatan bagi para mahasiswa untuk terjun langsungmenyelesaikan proyek
atau permasalahan lainnya dalam dunia kerja
4. Mendapatkan pengalaman dalam berpikir kritis dan memanajemen waktu

2
Bab II PT Dima Indonesia

II.1 Lingkup Pekerjaan


Penempatan penulis pada PT Dima Indonesia berada pada divisi IT Departmenet. Divisi
IT pada PT Dima Indonesia terbagi menjadi 4 tim di dalamnya, yakni tim INFRA, tim BOSNET,
tim TM. Perbedaan yang mendasari pembagian kedua tim ini adalah terkait tugas utama yang
ditanganinya. INFRA untuk mengatur infrastruktur IT seperti penanganan server, jaringan, dan
memperbaiki kerusakan alat kantor. BOSNET merupakan tim yang mengatur aplikasi yang
dipakai sales dan mengatur struktur data di dalamnya, BOSNET terbagi menjadi 2 tim yaitu
Information System dan Data Engineer. TM merupakan tim yang mengatur analisis data yang
terbagi menjadi 2 tim yaitu Data Analyst dan Business Analyst.

Terdapat projek terbaru yang dibangun oleh divisi IT dan vendor yang bertujuan untuk
meningkatkan pemantauan data dan efisiensi dalam pelaporan penjualan di 60 area cabang. Agar
pengembangan projek ini bisa lebih terstruktur, maka digabunglah tim BOSNET dan tim TM
yang akan menangani masing-masing area dan tugasnya. Penulis sendiri termasuk ke dalam tim
gabungan tersebut. Adapun lingkup pekerjaannya adalah memantau data dan membuat query
laporan beserta membantu analisis data yang terdapat dalam sistem

II.2 Deskripsi Pekerjaan


Pada divisi gabungan terdapat beberapa role dengan masing- masing job description yang
berbeda namun tetap sesuai dengan lingkup pekerjaan. Berbagai role tersebut di antaranya
adalah Information System, Data Analyst dan Data Engineer. Adapun job description dari setiap
role-nya adalah sebagai berikut
1) Information System
• Memperbaiki sistem web ketika terdapat gangguan ketika sales menggunakan web
tersebut
• Membuat laporan data transaksi sales
• Membuat ulasan dan laporan mingguan terkait data penjualan dankeuangan

3
2) Data Analyst
• Membuat kesimpulan laporan data secara harian, mingguan dan bulanan seluruh area
cabang
• Menganalisis perbedaan harga produk dengan kompetitor sehingga dapat menentukan
harga terbaik untuk menyaingi
• Membuat sebuah sistem analis yang memunculkan grafik garis dan balok dengan
menggunakan live data.
3) Data Engineer
• Mempersiapkan query laporan data dan menanamkan dalam web internal perusahaan
untuk memudahkan seluruh divisi menarik laporan.
• Mengefisiensi struktur database 35 area cabang.
• Membantu dalam pemberian laporan data kepada atasan dalam bentuk data grid
• Memantau 35 cabang dalam penggunaan projek terbaru dan memperbaiki
ketika terdapat data yang rusak.

Penulis sendiri termasuk ke dalam role Data Engineer, di mana setiap harinya penulis
melakukan pemantauan data menggunakan sistem yang ada. Dalam jangka bulanan juga
memberikan pelatihan ke seluruh area yang terdapat sales baru sehingga dapat menggunakan
sistem tersebut. Memberikan masukan dalam penggunaan query agar running time penarikan
laporan data lebih cepat mengingat kapasitas server yang tidak memadai sehingga penarikan
laporan membutuhkan waktu lama. Melakukan “pemangkasan” tabel data sehingga struktur data
lebih ringan dan tidak memakan banyak memori pada server.

II.3 Jadwal Kerja


Dalam program magang bersama PT Dima Indonesia, mahasiswa akan diberikan
pengalaman kerja yang sesungguhnya seperti karyawan perusahaan. Salah satu contoh buktinya
adalah jadwal dan waktu kerja yang diberikan. Untuk 4 setengah bulan pertama penulis memiliki
jadwal dan waktu kerja sebagai berikut.
Hari : Senin – Jumat
Waktu : 08.00 – 17.00 WIB (1 Jam istirahat pada pukul 12.00-13.00 WIB)
Tempat Kerja : Jl. Jembatan Tiga Komplek, Jl. Pluit Mas I No.1A, RT.1/RW.18, Pejagalan,
Penjaringan, North Jakarta City, Jakarta 14450

4
Sistem Kerja : Work From Office (WFO)
Lama Kerja : 8 jam/hari

Untuk 1 setengah bulan kemudian penulis memiliki jadwal dan waktu kerja sebagai
berikut.

Hari : Senin – Jumat


Waktu : 08.00 – 17.00 WIB (1 Jam istirahat pada pukul 12.00-13.00 WIB)
Tempat Kerja : Plaza Marein Lantai 15, Jalan Jendral Sudirman Kav. 76, Kebayoran Baru,
RT.2/RW.2, Kuningan, Setia Budi, Kecamatan Setiabudi, Kota Jakarta Selatan, Daerah Khusus
Ibukota Jakarta 12190

Sistem Kerja : Work From Office (WFO)

Adapun rincian kegiatan setiap harinya selama program magang berlangsung akan dijelaskan
lebih detail pada lampiran Log Activity.

5
BAB III
PERBANDINGAN EFEKTIFITAS RUNNING TIME EXECUTION DAN
MANAJEMEN MEMORI MENGGUNAKAN VIEW METHOD DAN ETL
METHOD DI PT DIMA INDONESIA

III.1 Analisis Running Time Execution ETL Method


Sebagai salah satu bagian dari tugas yang harus dilakukan seorang Data Enginner yakni
memantau struktur data dan upload data, Data Engineer juga perlu membuat query laporan
yang efektif dan efisien dalam penarikan data, terlebih lagi untuk jumlah data yang besar, apa
saja faktor yang berpengaruh pada efektifitas running time execution. Faktor-faktor ini tentu bisa
dari berbagai aspek, yaitu metode select yang digunakan, struktur relasi data. Untuk mewujudkan
tingkat efektifitas waktu yang tinggi, perlu dibangun suatu struktur data dan metode select yang
baiik. Metode yang dapat digunakan adalah menggunakan View Method dan ETL Method.
Selain untuk membuat eksekusi waktu yang lebih cepat, pemilihan metode yang tepat
dapat menghemat kapasitas ruang gudang data dan memperingan proses data perusahaan. Proses
sebelumnya hanya menggunakan metode select query seperti biasanya hal ini membuat proses
eksekusi memakan waktu yang lama jika ingin mengambil data dengan menggabungkan banyak
table yang dampak paling buruk pengambilan data dihentikan paksa oleh sistem dikarenakan
terlalu memakan waktu. Oleh karenanya, untuk meningkatkan efisiensi waktu pengambilan
laporan data menggunakan query ini perlu didukung dengan penggunaan metode baru sehingga
waktu mendapatkan laporan semakin cepat dan penarikan laporan dengan menggunakan sistem
semakin cepat juga. Berikut adalah hasil analisis kinerja beberapa metode query yang digunakan.

6
SELECT
VESR.szWorkplaceId [Kode Depo], VESR.szWorkplaceNm [Nama Depo],
VESR.szSalesId [Kode Salesman],VESR.szSalesNm [Nama Salesman], VESR.szTeamId [Kode Team],
VESR.szcustid [Kode Outlet],VESR.szcustnm [Na[ma Outlet], BAC.szCategory_4 [Kode Kategori], BACA.szDescription [Deskripsi],
COUNT(DISTINCT (CASE
WHEN (VESR.szReasonNm LIKE 'SFA-01-%' AND type != 'NOO') OR
( VESR.bSuccess = 1 AND Type != 'NOO' )OR (VESR.szReasonNm = '|' AND VESR.decVisitSpendTime > 0 AND Type != 'NOO')
OR (VESR.szReasonNm = 'Sukses' AND VESR.decVisitSpendTime > 0 AND type != 'NOO' )THEN VESR.szCustId
ELSE NULL
END)) [Actual Outlet Coverage], BAC.szCategory_10 [Direct/InDirect]--,VESR.dtmFTO
FROM View_EMDR_SD_RouteFeedback as VESR
LEFT JOIN BOS_AR_Customer AS BAC
ON BAC.szCustId = VESR.szCustId
LEFT JOIN BOS_AR_Category AS BACA
ON BACA.szCategoryId = BAC.szCategory_4
WHERE convert (DATE,dtmFTO) BETWEEN '2012-01-01 00:00:00.000' and '2023-06-30 00:00:00.000'
--and VESR.szCustId = '11101200459'
AND bSuccess IS NOT NULL
--AND szWorkplaceId in ${Workplace}
GROUP BY VESR.szWorkplaceId,
VESR.szWorkplaceNm,
VESR.szSalesId,
VESR.szSalesNm,
VESR.szcustid,
VESR.szcustnm,
VESR.szTeamId,BAC.szCategory_10, BAC.szCategory_4, BACA.szDescription

Algoritma 3.1 SQL Query menggunakan ETL Method


Berdasarkan gambar di atas, dapat dilihat running time execution menggunakan ETL
Method sangatlah lama dengan durasi 6 menit 38 detik. Tabel utama yang digunakan adalah
View_EMDR_SD_RouteFeedback. Alasan menggunakan tabel ini dikarenakan tabel ini
merupakan tabel dengan data yang paling banyak lalu di gabung dengan data tabel Customer dan
Kategori yang membuat data semakin berat sehingga proses mendapatkan laporan yang
berjumlah 16816 baris membutuhkan waktu rata-rata 6,22 menit. Oleh karena itu dibutuhkan
metode yang baru dalam pembuatan query laporan data tersebut.

III.2 Perancangan Method Baru dalam Pembuatan Query


Proyek perancangan metode baru ini tidak hanya untuk membuat query laporan saja.
Melainkan perbaikan struktur relasi beberapa data sehingga running time dapat lebih cepat dan
penulisan query juga singkat. Agenda rapat ini diikuti oleh penulis, tim leader dan beberapa
mentor sekaligus. Penulis melakukan diskusi terlebih dahulu dengan pembina instansi dan juga
staff senior perusahaan terkait penulisan laporan query yang sudah dibuat penulis selama magang
di perusahaan. Sehingga ditemukan bahwa dalam penarikan data Journey Plan (JP) sangat
membutuhkan waktu yang lama sehingga dalam pembuatan laporan harian menjadi terhambat.

Beberapa metode dapat diimplementasikan dalam mempersingkat eksekusi query dalam

7
menarik laporan. Penulis berdiskusi dengan pembina perusahaan dan juga staff senior dan
menemukan metode yang paling tepat yaitu menggunakan View Method atau Select CTE
Rekursif dalam penulisan query laporan.

;With outletcoverage_cte
as
(
SELECT
VESR.szWorkplaceId [Kode Depo], VESR.szWorkplaceNm [Nama Depo],
VESR.szSalesId [Kode Salesman],VESR.szSalesNm [Nama Salesman], VESR.szTeamId [Kode Team],
VESR.szcustid [Kode Outlet],VESR.szcustnm [Nama Outlet], BAC.szCategory_4 [Kode Kategori], BACA.szDescription [Deskripsi],
COUNT(DISTINCT (CASE
WHEN (VESR.szReasonNm LIKE 'SFA-01-%' AND type != 'NOO') OR
( VESR.bSuccess = 1 AND Type != 'NOO' )OR (VESR.szReasonNm = '|' AND VESR.decVisitSpendTime > 0 AND Type != 'NOO')
OR (VESR.szReasonNm = 'Sukses' AND VESR.decVisitSpendTime > 0 AND type != 'NOO' )THEN VESR.szCustId
ELSE NULL
END)) [Actual Outlet Coverage], BAC.szCategory_10 [Direct/InDirect]--,VESR.dtmFTO
FROM View_EMDR_SD_RouteFeedback as VESR
LEFT JOIN BOS_AR_Customer AS BAC
ON BAC.szCustId = VESR.szCustId
LEFT JOIN BOS_AR_Category AS BACA
ON BACA.szCategoryId = BAC.szCategory_4
WHERE convert (DATE,dtmFTO) BETWEEN '2012-01-01 00:00:00.000' and '2023-06-30 00:00:00.000'
--and VESR.szCustId = '11101200459'
AND bSuccess IS NOT NULL
--AND szWorkplaceId in ${Workplace}
GROUP BY VESR.szWorkplaceId,
VESR.szWorkplaceNm,
VESR.szSalesId,
VESR.szSalesNm,
VESR.szcustid,
VESR.szcustnm,
VESR.szTeamId,BAC.szCategory_10, BAC.szCategory_4, BACA.szDescription
)
select [Kode Depo], [Nama Depo], [Kode Salesman], [Nama Salesman], [Kode Team], [Kode Outlet],
[Nama Outlet], [Kode Kategori], [Deskripsi], [Actual Outlet Coverage], [Direct/InDirect]
from outletcoverage_cte
ORDER BY [Kode Depo], [Nama Salesman]

Algoritma 3.2 SQL Query menggunakan Select CTE Rekursif Method

Setelah melakukan eksplorasi metode dan memiliki gambaran, penulis membuat


penulisan query menggunakan metode Select CTE Rekursif. Metode ini sangat banyak digunakan
di dunia industri distribusi dalam penarikan data dari tabel yang besar dan memiliki banyak
persyaratan serta jumlah data yang banyak sehingga sangat menghemat waktu. Dalam gambar
tertera bahwa penarikan data menggunakan metode Rekursif CTE memakan waktu rata-rata 2,96
menit. Semakin cepat waktu jalannya query maka ketika ditanamkan pada sistem web tarikan
data. Maka seluruh divisi yang membutuhkan laporan akan semakin cepat dalam pembuatan
laporan harian, mingguan, dan bulanan.

8
SELECT
VESR.szWorkplaceId [Kode Depo], VESR.szWorkplaceNm [Nama Depo],
VESR.szSalesId [Kode Salesman],VESR.szSalesNm [Nama Salesman], VESR.szTeamId [Kode Team],
VESR.szcustid [Kode Outlet],VESR.szcustnm [Nama Outlet],
COUNT(DISTINCT (CASE
WHEN (VESR.szReasonNm LIKE 'SFA-01-%' AND type != 'NOO') OR
( VESR.bSuccess = 1 AND Type != 'NOO' )OR (VESR.szReasonNm = '|' AND VESR.decVisitSpendTime > 0 AND Type != 'NOO')
OR (VESR.szReasonNm = 'Sukses' AND VESR.decVisitSpendTime > 0 AND type != 'NOO' )THEN VESR.szCustId
ELSE NULL
END)) [Actual Outlet Coverage]--,VESR.dtmFTO
FROM View_EMDR_SD_RouteFeedback as VESR
WHERE convert (DATE,dtmFTO) BETWEEN '2012-01-01 00:00:00.000' and '2023-06-30 00:00:00.000'
--and VESR.szCustId = '11101200459'
AND bSuccess IS NOT NULL
--AND szWorkplaceId in ${Workplace}
GROUP BY VESR.szWorkplaceId,
VESR.szWorkplaceNm,
VESR.szSalesId,
VESR.szSalesNm,
VESR.szcustid,
VESR.szcustnm,
VESR.szTeamId

Algoritma 3.3 SQL Query menggunakan View Method

Metode yang digunakan selanjutnya menggunakan View Method, penulis membuat


penulisan query menggunakan View Method. View Method menerapkan sistem penanaman
query. Penulis membuat query terlebih dahulu dalam proses pembuatan lalu mendeklarasikan
query tersebut menjadi sebuah View lalu memanggil kembali dan menambahkan proses
tambahan lalu menjalankan query tersebut dan memberikan waktu rata-rata 2,11 menit.

III.3 Analisa Perbandingan Execution Running Time

PERCOBAAN
METODE QUERY 1 2 3 4 5
ETL 6 Menit 38 Detik 4 Menit 22 Detik 7 Menit 8 Detik 5 Menit 6 Detik 7 Menit 53 Detik
CTE REKURSIF 3 Menit 50 Detik 2 Menit 18 Detik 3 Menit 5 Detik 3 Menit 2 Menit 34 Detik
VIEW SEDERHANA 2 Menit 54 Detik 1 Menit 35 Detik 1 Menit 24 Detik 2 Menit 42 Detik 1 Menit 57 Detik
Tabel 3.1 Tabel perbandingan running time

Dalam menjalankan query laporan JP (Journey Plan), penulis menggunakan merk laptop
HP Elitebook 830 G5 dan menggunakan koneksi langsung dari kantor penulis bekerja. Penulis
menggunakan tiga metode dalam menjalankan query laporan data tersebut.
Setiap metode query yang digunakan mendapatkan hasil yang berbeda-beda dengan total
lima kali percobaan di setiap metodenya. Metode yang memiliki Execution Running Time

9
terlama menggunakan metode ETL dengan waktu tercepat 4 menit 22 detik dan waktu terlama 7
menit 53 detik dengan rata-rata 6,22 menit dalam lima kali percobaan. Metode kedua, CTE
Rekursif, memiliki waktu tercepat 2 menit 18 detik dan waktu terlama 3 menit 50 detik dengan
rata-rata waktu 2,96 menit dalam lima kali percobaan. Metode terakhir yang digunakan, View,
memiliki waktu tercepat 1 menit 24 detik dan waktu terlama 2 menit 54 detik dengan rata-rata
waktu eksekusi adalah 2,11 menit dalam lima kali percobaan.
Setelah penulis melakukan lima kali percobaan dengan menggunakan metode yang
berbeda dapat memberikan hasil bahwa menulis query menggunakan metode ETL untuk data
yang banyak sangatlah tidak efisien yang akan memakan waktu sangat lama. Metode dengan
tingkat efisien tertinggi dalam percobaan adalah dengan menggunakan metode view.

10
Bab IV Penutup

IV.1 Kesimpulan
Berdasarkan hasil dari tiga metode yang sudah diterapkan dalam pembuatan query data,
dapat disimpulkan bahwa:
1. Metode query dengan ekseskusi waktu tercepat dalam pengambilan atau pembuatan data
yang besar dan sumber data berasal dari banyak table yang paling efisien menggunakan
metode View.
2. Metode ETL sangat tidak efektif dalam pembuatan query untuk menarik laporan dan
memproses laporan data dengan jumlah data yang banyak.
3. Faktor lain yang mempengaruhi cepat lambatnya eksekusi adalah prosesor laptop atau
komputer beserta kecepatan jaringan.
4. Dengan berpartisipasi langsung dalam mengerjakan proyek kerja nyata pada PT Dima
Indonesia mampu membuat penulis menjadi terpacu untuk melakukan eksplorasi terhadap
hal baru dan menyelesaikan tantangan-tantangan yang ada.

IV.2 Saran
Adapun saran yang dapat diberikan oleh penulis terkait kegiatan program magang Kampus
Merdeka bersama mitra PT. Dima Indonesia di antaranya adalah sebagai berikut
1. Perlu adanya komunikasi yang lebih aktif antar semua pihak demi kelancaran proyek hingga
akhir.
2. Perlu adanya perubahan nama pada tabel sehingga dapat mempermudah dalam penentuan
join table dan tidak memiliki makna ambigu ketika ingin menarik laporan dan pembuatan
query.
3. Program magang dengan sistem kerja seperti pada PT Dima Indonesia dapat diterapkan pada
perusahaan lain, sehingga dimanapun mahasiswa mengikuti program magang, mahasiswa
bisa sama-sama belajar hal yang baru yang belum diketahui di dalam dunia perkuliahan.

11
Referensi

Christudas, Binildas. 2019. MySQ: Practical Microservices Architectural Patterns. California:


Apress Berkeley.
DQLab.com, (2023), “Deretan Skill Penting untuk Siap jadi Data Engineer”, Diakses pada 19
Agustus 2023 dari https://dqlab.id/deretan-skill-penting-untuk-siap-jadi-data-engineer
JagoanHosting.com, (2022), “Query”. Diakses pada 19 Agustus 2023 dari
https://www.jagoanhosting.com/blog/query-adalah/
Yadi Lastiawan, Robi. 2021. Common Table Expression. Product Engineering, diakses pada 19
Agustus 2023 dari https://waresix.engineering/common-table-expression-1cdab291b5d

12
Lampiran
Lampiran I. Log Activity
Minggu/Tgl Kegiatan Hasil
Minggu ke-1(6- Minggu ini saya mempelajari terkait Hasil yang didapatkan
10 1. Pengenalan kantor dan sistem yang pemahaman tentang
Februari 2023) digunakan. lingkungan kantor dan cara
2. Pemberitahuan jobdesc yang kerja sistem beserta
diberikan dan mempelajari secara mengingat kembali
langsung sistem software yang menggunakan MySql
digunakan
3. Mengulang dan mengingat kembali
sql query

Minggu ke-2(13- Kegiatan saya di minggu ini berupa : Hasil yang didapatkan
17 1. Membuat query laporan kontribusi minggu ini adalah :
Februrari 2023) customer di setiap wilayah. 1. Mengenal beberapa tabel
2. Menganalisa beberapa query laporan data dari sistem database.
dan mengefisiensikan query tersebut2. Mengetahui struktur
database.

Minggu ke-3 Kegiatan saya di minggu ini yaitu: Hasil yang didapatkan
(20–24 Februari
1. Mempelajari dan menganalisa query minggu ini adalah :
2023) laporan 1. Setiap tarikan data query
2. Membuat query Analisa JP dan rata- tidak selamanya sesuai
rata harga brand disetiap wilayah dengan yang dibutuhkan
3. Memvalidasi proses data tarikan query
2. Cara validasi data

13
Minggu ke-4(27 Agenda di minggu ini saat menarik Hasil yang didapatkan
Februari–3 dikarenakan focus dalam Analisa minggu ini adalah :
Maret 2023) seluruh query laporan dan membuat1. Cara menganalisa efisiensi
query laporan baru lalu query yang telah dibuat
mempersiapkan acara ulang tahun 2. Mengenal karyawan lebih
perusahaan yang ke 70 dekat

Minggu ke-5(6- Minggu ini cukup banyak hal yangsaya Hasil yang didapatkan
10 pelajari, di antaranya adalah minggu ini adalah :
Maret 2023) 1. Membuat query perbandinga SO1. Mengingat kembali
Modis dan SO Manual lalu visualisasi data
memvalidasi 2. Mengetahui cara berfikir
2. Menganalisis dan merombak query dalam suatu rapat dan
SO agar lebih optimal menarik kesimpulan
3. Membuat analisis menggunakan
python
4. Menghadiri rapat dalam
pembahasan pmebuatan laporan

Minggu ke-6(13- Kegiatan minggu ini diisi dengan : Hasil yang didapatkan
17 1. Melakukan analisis web untuk minggu ini adalah :
Maret 2023) menemukan bug dalam penggunaan1. Mengetahui cara kinerja
2. Melakukan persiapan laporan data dalam analisis website
2. Cara mengolah data
transaksi seluruh area secara nasional
menggunakan excel

Minggu ke-7(20- Kegiatan minggu ini cukupringan, Hasil yang didapatkan


24 diantaranya : minggu ini adalah :
Maret 2023) 1. Mempelajari looker studio 1. Pengalaman dalam
2. Mempelajari Power BI menggunakan looker studio
dan power BI

Minggu ke-8(27- Kegiatan minggu adalah Hasil yang didapatkan


31 1. Mendaftarkan seluruh customer di 1. Memperdalam skill query
Maret 2023) setiap area pada sistem 2. Memperdalam skill excel
2. Membuat query laporan call out JP dan
mempersiapkan file transaksi untuk di
upload data database

14
Minggu ke-9(3-7 Minggu ini membuat Query tentang Hasil yang didapatkan
April 2023) laporan data CALL JP dan membuat bagaimana cara membuat
ppt guide book dalam mengolah dan ppt yang efisien dan
mengupload data transaksi menarik sehingga semua
orang mengerti dalam
penggunaannya

Minggu ke-10 Kegiatan di minggu ini mengupload Hasil yang didapatkan


(10-14 data 6 bulan dari 33 cabang ke dalam minggu ini adalah :
April 2023) database Cara mengolah data

Minggu ke-11 Kegiatan minggu ini masih berfokus Hasil yang didapatkan
(17-21 pada data upload transactin di 33 minggu ini adalah :
April 2023) cabang untuk memastikan data pada Cara cepat dalam
database sesuai dengan data olahan. menganalisis data yang
Lalu mapping data dengan primary key banyak dan mengetahui
perusahaan bagaimana caranya
mapping ke suatu sistem

Minggu 12 minggu ini adalah : minggu ini adalah :


(25–28 April 1. Membuat query laporan 1. Pengalaman dalam melihat
2023) 2. Menganalisa struktur database struktur database yang
3. Memberi masukan kepada struktur digunakan perusahaan
database 2. Melakukan perubahan
keppada struktur relasi data

15
Minggu ke-13 Kegiatan di minggu ini adalah: Hasil yang didapatkan
(01-05 Mei 1. Preprosesing data mentah dan minggu ini adalah
2023) menyesuaikan dengan menggunakan1. Mengolah file data mentah
template yang disediakan. 2. Mengubah dan
2. Mempelajari beberapa config setingan mempelajari settingan
software dalam mempelancar upload software yang digunakan
data perusahaan.

Minggu ke-14(8- Agenda minggu ini kurang lebih sama Hasil yang didapatkan di
12 Mei 2023) dengan agenda di minggu lalu untuk minggu ini merupakan
mempreprosesing data 33 cabang dan ketelitian dalam
memvalidasi hasil dari olahan data memvalidasi suatu laporan
dengan data mentah lalu hasil upload dan melakukan
data dengan data mentah preprosesing suatu data.

Minggu ke-15 Memprosesing kumpulan data sesuai Hasil yang didapatkan


(15-19 Mei2023) template lalu mengupload data ke pengalaman dalam
sistem database dan memvalidasi data mengurus suatu data dalam
tersebut suatu database dan
diberikan kepercayaan
dalam mengolah data
transaksi 33 cabang.

Minggu ke-16 Melakukan meeting dengan vendor Mendapatkan pengalaman


(22- 26 Mei terkait proses upload data mengalami untuk rapat dengan atasan
2023) eror yang menghambat progres dan vendor dan
berjalan bahkan progres sempat memperhatikan dalam
berhenti menganalisis masalah
hingga ke sumbernya dan
juga melakukan
penyelesaian yang tercepat
seperti apa.

16
Minggu ke -17 adalah : minggu ini adalah
(29 Mei-02 1. Melakukan penarikan data
1. Mendapatkan kepercayaan
Juni 2023) menggunakan website perusahaan mengakses data perusahaan
yang terhubung langsung dengan keseluruhan sebagai super
database admin
2. Membantu tugas staff senior dalam
2. Bekerjasama dengan senior
pembuatan serta pengambilan laporan dalam tugas kantor
menggunaakan query

Minggu ke-18 Kegiatan di minggu ini tidak jauh Hasil yang didapatkan
(05-09 Juni berbeda dengan tugas biasanya yaitu minggu ini adalah
2023) mempersiapkan file upload do 1. Pemahaman secara dalam
transaction seluruh area cabang serta mengolah data
mendaftarkan pada sistem database menggunakan excel dan
customer memperdalam skill excel

Minggu ke-19 Agenda di minggu ini sangatlah Hasil yang didapatkan


(12-16 Juni menarik minggu ini
2023) 1. Melihat kembali infrastruktur database
1. Mengefisiensikan struktur
beberapa cabang dan mengolah relasi database
kembali agar struktur lebih efisien 2. Mengetahui secara detail
2. Memperhatikan kinerja software dalam konsep kerja ETL dan ELT
memproses suatu data dengan
menerapkan metode ETL dan ELT
sesuai kebutuhan
Minggu ke-20 Highlight agenda kegiatan mingguini Hasil yang didapatkan
(19-23 Juni adalah : minggu ini adalah
2023) 1. Kembali memperdalam skill query 1. Pengalaman dalam
dengan mempelajari ilmu baru membuat query
menggunakan select rekursif CTE dan menggunakan 2 metode
juga memperlajari bagaimana cara baru yaitu View dan
membuat VIEW Rekursif CTE

17
Minggu ke-21 Agenda kegiatan Minggu ini adalah: Hasil yang didapatkan di
(26 – 30 Juni)1. Menerima data mentah dari data minggu ini adalah
analyst dan membuat perbandingan 1. Cara melakukan analisis
hasil analisis menggunakan data menggunakan query lalu
mentah dan data pada database menerapkan grafik ke excel
2. Preprosesing data transaksi setiap area serta melakukan
agar dapat upload ke database perbandingan hasil analisis
data engineer dengan data
analyst

Minggu ke-22 Agenda kegiatan minggu ini sangat Hasil kegiatan diminggu ini
(3 – 7 Juli) ringan yaitu: adalah
1. Memantau progress setiap area cabang
1. Cara memantau kinerja
dalam mengolah file closingan secara online dan
2. Membantu beberapa tugas lainnya. mengingati jika terjadi
kesalahan dalam proses
data

Minggu ke-23 Agenda kegiatan minggu ini adalah Hasil kegiatan minggu ini
(10-14 Juli) 1. Mengakses data perusahaan PT BIR adalah
dan melakukan penulisan query untuk1. Memperdalam skill baru
menarik data laporan menyesuaikan dalam query yang
struktur data yang digunakan menerapkan sistem IF
2. Mengikuti training dari perusahaan ELSE dalam SQL dan Over
untuk meningkatkan softskill Partition By
2. Mendapatkan ilmu dari
setelah mengikuti training
pegawai dari perusahaan

18
Minggu ke-24 Agenda minggu ini sangat ringan Hasil kegiatan minggu ini
(17 – 21 Juli) 1. Kembali mengulang prosesing data 33adalah
cabang di bulan juli untuk diupload 1.
Mendapatkan ilmu baru
pada database dalam excel yaitu Pivot dan
2. Mengobservasi dan memvalidasi data VLOOKUP dan juga fitur-
menggunakan perbandingan dari data fitur serta metode
mentah pengolahan data
menggunakan excel
2. Mengobservasi bagaimana
cara divisi TradeMarketing
mendapatkan data serta
mengolah data
Minggu ke-25 Agenda minggu ini Hasil kegiatan minggu ini
(24-31 Juli) 1. Mengobservasi kembali data survey adalah:
yang digunakan kepada salesman dan Mengetahui cara kerja data
mengobservasi bagaimana data analyst analyst dalam membuat
menganalisis perbandingan harga perbandingan
dengan competitor menggunakan keseluruhan
2. Melakukan proses perpanjangan data untuk mendapatkan
kontrak hasil perbandingan yang
pasti dengan tingkat
ketepatan 98%

19
Lampiran II. Bukti Proses Running Data menggunakan metode ETL

Gambar Lampiran 2.1. Execution Running Time ETL 1

Gambar Lampiran 2.2. Execuiton Running Time ETL 2

20
Gambar Lampiran 2.3. Execution Running Time ETL 3

Gambar Lampiran 2.4. Execution Running Time ETL 4

21
Gambar Lampiran 2.5. Execution Running Time ETL 5

22
Lampiran III. Bukti Proses Running Data menggunakan metode CTE Rekursif

Gambar Lampiran 3.1. Execution Running Time CTE 1

Gambar Lampiran 3.2. Execution Running Time CTE 2

23
Gambar Lampiran 3.3. Execution Running Time CTE 3

Gambar Lampiran 3.4. Execution Running Time CTE 4

24
Gambar Lampiran 3.5 Execution Running Time CTE 5

25
Lampiran IV. Bukti Proses Running Data menggunakan metode View

Gambar Lampiran 4.1. Execution Running Time View 1

Gambar Lampiran 4.2. Execution Running Time View 2

26
Gambar Lampiran 4.3. Execution Running Time View 3

Gambar Lampiran 4.4. Exectuion Running Time View 4

27
Gambar Lampiran 5.1. Execution Running Time View 5

28
Lampiran V. Query Data View
CREATE VIEW [dbo].[View_EMDR_SD_RouteFeedback]
AS
-- View_EMDR_SD_RouteFeedback --
WITH ROUTE_CTE AS (
-- INROUTE--
SELECT b.szWorkplaceId,
(SELECT TOP 1 zz.szName from dbo.BOS_GL_Workplace zz Where b.szWorkplaceId =
zz.szWorkplaceId)[szWorkplaceNm],
ISNULL(e.szTeamId,e2.szTeamId)[szTeamId],
CASE WHEN e1.bEnableOrder = '1' and e1.bEnableActivation = '1' then 'ORDER/ACT'
WHEN e21.bEnableOrder = '1' and e21.bEnableActivation = '1' then 'ORDER/ACT'
When e1.bEnableOrder = '1' and e1.bEnableActivation = '0' then 'ORDER'
When e21.bEnableOrder = '1' and e21.bEnableActivation = '0' then 'ORDER'
When e1.bEnableOrder = '0' and e1.bEnableActivation = '1' then 'ACTIVATION'
When e21.bEnableOrder = '0' and e21.bEnableActivation = '1' then 'ACTIVATION' Else ''
END AS [Team_Type]
,b.szSalesId,
(SELECT TOP 1 UPPER(zz.szName) from dbo.BOS_PI_Employee (READPAST) zz Where b.szSalesId =
zz.szEmployeeId)[szSalesNm],
(SELECT b1.[szName] FROM dbo.BOS_PI_Employee a
INNER JOIN dbo.BOS_Pi_Department b1 on a.szDepartmentId = b1.szDepartmentId
Where a.szEmployeeId = b.szSalesId) [Department],
b.dtmFTO,b.szFTOId,UPPER(b.szBaseRouteId)[szBaseRouteId],f.szScheduleId,
CASE WHEN DATENAME(dw,b.dtmFTO) = 'Sunday' then 'MINGGU'
WHEN DATENAME(dw,b.dtmFTO) = 'Monday' then 'SENIN'
WHEN DATENAME(dw,b.dtmFTO) = 'Tuesday' then 'SELASA'
WHEN DATENAME(dw,b.dtmFTO) = 'Wednesday' then 'RABU'
WHEN DATENAME(dw,b.dtmFTO) = 'Thursday' then 'KAMIS'
WHEN DATENAME(dw,b.dtmFTO) = 'Friday' then 'JUMAT' ELSE 'SABTU' END AS [Hari],
g.[szYWeek][szYWeek],
CASE WHEN g.[szYWeek] % 2 = 0 then 'GENAP' ELSE 'GANJIL' END AS [Type Week],
a.shItemNumber+1[No.Urut],c.szCustId,
(SELECT top 1 UPPER(zz.szName) FROM dbo.BOS_AR_Customer (READPAST) zz Where c.szCustId =
zz.szCustId)[szCustNm],
a.dtmStartVisit,a.dtmEndVisit,a.decVisitSpendTime,
CONVERT(TIME(0),cast(dateadd(second, datediff(second, a.dtmStartVisit, a.dtmEndVisit),
'19000101') AS TIME))[VisitSpendTime],
'INROUTE'[Type],
CASE WHEN a.szLatitude in ('','0') then '' ELSE a.szLatitude END AS [szLatitude],
CASE WHEN a.szLongitude in ('','0') then '' ELSE a.szLongitude END AS [szLongitude],
CASE WHEN h.decAmount > 0 and h.bVoid = '0' then '1' ELSE '0' END AS [bSuccess],
CASE WHEN a.szReasonId = '' and h.decAmount > 0 and h.bVoid = '0' and b.dtmFTO <> DATEADD(dd,
DATEDIFF(dd, 0, h.dtmOrder), 0) then 'Sukses'
WHEN a.szReasonId = '' and h.decAmount > 0 and h.bVoid = '1' then 'SO Cancel'
WHEN a.szReasonId = '' and h.decAmount > 0 and h.bVoid = '0' and b.dtmFTO <> DATEADD(dd,
DATEDIFF(dd, 0, h.dtmOrder), 0) then 'SO Beda Tanggal'
ELSE
CONCAT(a.szReasonId,'|',(SELECT top 1 zz.szDescription from dbo.BOS_GEN_Reason zz Where
a.szReasonId = zz.szReasonId )) END AS [szReasonNm],
a.bGPSScanSuccess,
CASE WHEN a.szGPSScanFailReasonId = '' then '' ELSE
CONCAT(a.szGPSScanFailReasonId,'|',(SELECT top 1 zz.szDescription from dbo.BOS_GEN_Reason zz
Where a.szGPSScanFailReasonId = zz.szReasonId )) END AS [szGPSScanFailReasonNm],
ISNULL(m.bVisible,0) [bVisible],
h.dtmOrder,c.[szFSoId][szFSoId],
(SELECT TOP 1 zz.szDoId FROM dbo.BOS_SD_FDo zz Where c.szFSoId = zz.szFSoId ORDER by
zz.dtmCreated Desc )[szDoId],
h.decAmount [decAmount],
CASE WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 0 then
'Tidak Order'
WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 1 then
'Tidak Kunjungan'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '0' then 'DRAFT'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '1' then 'BATAL'
Else h.szStatus END AS [Status_Order],
d.[Count][ItemCount_StockCount],d.SumQty[SumQty_StockCount],
(SELECT TOP 1 zz.dtmUpload FROM dbo.BOS_MD_UploadHistory zz Where zz.szDFsDocId =
c.szFSoId)[dtmUpload],

29
CASE WHEN i.szLatitude in ('','0') then '' Else i.[szLatitude] END AS [szLatitude_Cust],
CASE WHEN i.szLongitude in ('','0') then '' Else i.[szLongitude] END AS [szLongitude_Cust],
Concat(i.szLatitude,' ',i.szLongitude)[Customer_Location],
Concat(a.szLatitude,' ',a.szLongitude)[Input_Location],
Case when Concat(a.szLatitude,' ',a.szLongitude) = '0 0' then NULL
when Concat(a.szLatitude,' ',a.szLongitude) = '' then NULL
when Concat(i.szLatitude,' ',i.szLongitude) = '' then NULL
Else
ROUND((geography::Point(i.szLatitude, i.szLongitude,
4326).STDistance(geography::Point(a.szLatitude, a.szLongitude, 4326))/1000),2)end as
[Jarak_Input],
j.szPropinsi,j1.CustszState[szPropinsi_GMAP],j2.CustszState[szPropinsi_Input],
j.szKabupaten,j1.CustszCity[szKabupaten_GMAP],j2.CustszCity[szKabupaten_Input],
j.szKecamatan,j1.CustszAddress_2[szKecamatan_GMAP],j2.CustszAddress_2[szKecamatan_Input],
j.szKelurahan,j1.CustszDistrict[szKelurahan_GMAP],j2.CustszDistrict[szKelurahan_Input],
Concat(i.CustszAddress_1,',Kel.',j.szKelurahan,',Kec.',j.szKecamatan,',
',j.szKabupaten,',',j.szPropinsi)[Cust_Address_Bosnet],
j1.CustszAddress_1 [Cust_Address_GMAP],
k.[decAmount_PDR],l.[decAmount_CAS]
FROM dbo.BOS_SD_FTOItem a
INNER JOIN dbo.BOS_SD_FTO b on a.szFTOId = b.szFTOId
LEFT JOIN dbo.BOS_SD_TOTracking c on a.szTOTrackingId = c.szTOTrackingId
LEFT JOIN
(SELECT DISTINCT
a.szCustId,a.dtmDate,COUNT(szProductId)[Count],(+SUM(decDisplayQty)+SUM(decRemainQty))[SumQty]
FROM [dbo].[BOS_SD_RemainStockInCustomer] a GROUP BY a.szCustId,a.dtmDate) d on c.szCustId =
d.szCustId and b.dtmFTO = d.dtmDate
LEFT JOIN dbo.BOS_SD_MGM_Area e on b.szSalesId = e.szOpUserId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e1 on e.szTeamId = e1.szTeamId
LEFT JOIN dbo.BOS_PI_Employee e2 on b.szSalesId = e2.szEmployeeId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e21 on e2.szTeamId = e21.szTeamId
LEFT JOIN
(SELECT a.szScheduleId,a.szOpUserId,b.szCustId
FROM dbo.BOS_SD_Route a
INNER JOIN dbo.BOS_SD_RouteItem b on a.szRouteId = b.szRouteId) f on b.szSalesId = f.szOpUserId
and c.szCustId = f.szCustId
LEFT JOIN dbo.BOS_BIZ_PeriodicCalendar g on b.dtmFTO = g.dtmDate
LEFT JOIN dbo.BOS_SD_FSo h on c.szFSoId = h.szFSoId
LEFT JOIN dbo.BOS_AR_Customer i on c.szCustId = i.szCustId
LEFT JOIN View_EMDR_AR_Cust_District j on c.szCustId = j.szCustId
LEFT JOIN dbo.EMDR2_AR_Cust_Latlong j1 (READPAST) on i.szLatitude = j1.szLatitude and
i.szLongitude = j1.szLongitude
LEFT JOIN [dbo].[View_EMDR_AR_Cust_LatlongApi] j2 on ROUND(a.szLatitude,5) = j2.[szLatitude_Area]
AND ROUND(a.szLongitude,5) = j2.[szLongitude_Area]
-- PDR INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,a.dtmPdrReceipt,SUM(b.decAmount)[decAmount_PDR]
FROM dbo.BOS_CAS_FPdrReceipt a
INNER JOIN dbo.BOS_CAS_FPdrReceiptItem b on a.szFPdrReceiptId = b.szFPdrReceiptId
WHERE a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,a.dtmPdrReceipt) k on b.dtmFTO = k.dtmPdrReceipt and
b.szSalesId = k.szDeposanId and c.szCustId = k.szCustId
-- CAS INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment),
0)[dtmFCustPayment],
SUM(b.decPaidByCashReceipt)[decAmount_CAS]
FROM dbo.BOS_AR_FCustPayment a
INNER JOIN dbo.BOS_AR_FCustPaymentItem b on a.szFCustPaymentId = b.szFCustPaymentId
Where a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment), 0)
HAVING SUM(b.decPaidByCashReceipt) > 0) l on b.dtmFTO = l.dtmFCustPayment and c.szCustId =
l.szCustId and b.szSalesId = l.szDeposanId
-- Visibility Info --
LEFT JOIN
(SELECT
a.szCustId,a.dtmDate,a.szVisibilityId,a.dtmLastUpdated,a.bVisible,a.szWorkplaceId,a.szSalesId
FROM dbo.BOS_SD_VisibilityInCustomer a
INNER JOIN dbo.BOS_PI_Visibility b on a.szVisibilityId = b.szVisibilityId and b.szVisibilityType
= 'Gagal Scan GPS'

30
Where a.bVisible = '1') m on c.szCustId = m.szCustId and b.dtmFTO = m.dtmDate and b.szSalesId =
m.szSalesId and b.szWorkplaceId = m.szWorkplaceId
WHERE b.bApplied = '1'
and b.dtmFTO >= (Select Case when DB_NAME() like '%_REPL%' then
DATEADD(yy,DATEDIFF(yy,0,GETDATE())-5,0) Else (Select top 1 b.dtmStart from dbo.BOS_GL_AccPeriod
a
inner join dbo.BOS_GL_AccountingCalendarItem b on a.szAccPeriodNm = b.szAccPeriodNm and
a.szAccPeriodStatus = 'OPE') end as [DATELIMITER])
UNION ALL
-- NEW OPEN OUTLET --
SELECT b.szWorkplaceId,(SELECT TOP 1 zz.szName from dbo.BOS_GL_Workplace zz Where b.szWorkplaceId
= zz.szWorkplaceId)[szWorkplaceNm],
ISNULL(e.szTeamId,e2.szTeamId)[szTeamId],
CASE WHEN e1.bEnableOrder = '1' and e1.bEnableActivation = '1' then 'ORDER/ACT'
WHEN e21.bEnableOrder = '1' and e21.bEnableActivation = '1' then 'ORDER/ACT'
When e1.bEnableOrder = '1' and e1.bEnableActivation = '0' then 'ORDER'
When e21.bEnableOrder = '1' and e21.bEnableActivation = '0' then 'ORDER'
When e1.bEnableOrder = '0' and e1.bEnableActivation = '1' then 'ACTIVATION'
When e21.bEnableOrder = '0' and e21.bEnableActivation = '1' then 'ACTIVATION' Else ''
END AS [Team_Type],
b.szSalesId,
(SELECT TOP 1 UPPER(zz.szName) from dbo.BOS_PI_Employee (READPAST) zz Where b.szSalesId =
zz.szEmployeeId)[szSalesNm],
(SELECT b1.[szName] FROM dbo.BOS_PI_Employee a
INNER JOIN dbo.BOS_Pi_Department b1 on a.szDepartmentId = b1.szDepartmentId
Where a.szEmployeeId = b.szSalesId) [Department],
b.dtmFTO,b.szFTOId,UPPER(b.szBaseRouteId)[szBaseRouteId],
f.szScheduleId,CASE WHEN DATENAME(dw,b.dtmFTO) = 'Sunday' then 'MINGGU'
WHEN DATENAME(dw,b.dtmFTO) = 'Monday' then 'SENIN'
WHEN DATENAME(dw,b.dtmFTO) = 'Tuesday' then 'SELASA'
WHEN DATENAME(dw,b.dtmFTO) = 'Wednesday' then 'RABU'
WHEN DATENAME(dw,b.dtmFTO) = 'Thursday' then 'KAMIS'
WHEN DATENAME(dw,b.dtmFTO) = 'Friday' then 'JUMAT' ELSE 'SABTU' END AS [Hari],
g.[szYWeek][szYWeek],
CASE WHEN g.[szYWeek] % 2 = 0 then 'GENAP' ELSE 'GANJIL' END AS [Type Week],
NULL[No.Urut],a.szCustId,(SELECT top 1 UPPER(zz.szName) FROM dbo.BOS_AR_Customer (READPAST) zz
Where a.szCustId = zz.szCustId)[szCustNm],
a.dtmStartVisit,a.dtmEndVisit,a.decVisitSpendTime,
CONVERT(TIME(0),cast(dateadd(second, datediff(second, a.dtmStartVisit, a.dtmEndVisit),
'19000101') AS TIME))[VisitSpendTime],'NOO'[Type],
CASE WHEN a.szLatitude in ('','0') then '' ELSE a.szLatitude END AS [szLatitude],
CASE WHEN a.szLongitude in ('','0') then '' ELSE a.szLongitude END AS [szLongitude],
CASE WHEN h.decAmount > 0 then '1' ELSE '0' END AS [bSuccess],
CASE WHEN a.bSuccess = '1' and h.decAmount > 0 and h.bVoid = '0' then 'Sukses'
WHEN a.bSuccess = '0' and a.szCustId = '' then a.szCustNOOId ELSE 'New Customer' END AS
[szReasonNm],
CASE WHEN a.szLatitude in ('','0') then '0'
WHEN a.szLongitude in ('','0') then '0' ELSE '1' END AS [bGPSScanSuccess],
CASE WHEN a.szGPSScanFailReasonId = '' then '' ELSE
CONCAT(a.szGPSScanFailReasonId,'|',(SELECT top 1 zz.szDescription from dbo.BOS_GEN_Reason zz
Where a.szGPSScanFailReasonId = zz.szReasonId )) END AS [szGPSScanFailReasonNm],
ISNULL(m.bVisible,0) [bVisible],h.dtmOrder,
ISNULL(h.szFSoId,h1.szFSoId)[szFSoId],
(SELECT TOP 1 zz.szDoId from dbo.BOS_SD_FDo zz Where zz.szFSoId =
h.szFSoId)[szDoId],ISNULL(h.decAmount,h1.decAmount)[decAmount],
CASE WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 0 then
'Tidak Order'
WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 1 then
'Tidak Kunjungan'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '0' then 'DRAFT'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '1' then 'BATAL'
Else h.szStatus END AS [Status_Order],
0[ItemCount_StockCount],0[SumQty_StockCount],
(SELECT TOP 1 zz.dtmUpload FROM dbo.BOS_MD_UploadHistory zz Where zz.szDFsDocId =
h.szFSoId)[dtmUpload],
CASE WHEN i.szLatitude in ('','0') then '' Else i.[szLatitude] END AS [szLatitude_Cust],
CASE WHEN i.szLongitude in ('','0') then '' Else i.[szLongitude] END AS [szLongitude_Cust],
Concat(i.szLatitude,' ',i.szLongitude)[Customer_Location],
Concat(a.szLatitude,' ',a.szLongitude)[Input_Location],
Case when Concat(a.szLatitude,' ',a.szLongitude) = '0 0' then NULL
when Concat(a.szLatitude,' ',a.szLongitude) = '' then NULL

31
when Concat(i.szLatitude,' ',i.szLongitude) = '' then NULL
Else
ROUND((geography::Point(i.szLatitude, i.szLongitude,
4326).STDistance(geography::Point(a.szLatitude, a.szLongitude, 4326))/1000),2)end as
[Jarak_Input],
j.szPropinsi,j1.CustszState[szPropinsi_GMAP],j2.CustszState[szPropinsi_Input],
j.szKabupaten,j1.CustszCity[szKabupaten_GMAP],j2.CustszCity[szKabupaten_Input],
j.szKecamatan,j1.CustszAddress_2[szKecamatan_GMAP],j2.CustszAddress_2[szKecamatan_Input],
j.szKelurahan,j1.CustszDistrict[szKelurahan_GMAP],j2.CustszDistrict[szKelurahan_Input],
Concat(i.CustszAddress_1,',Kel.',j.szKelurahan,',Kec.',j.szKecamatan,',
',j.szKabupaten,',',j.szPropinsi)[Cust_Address_Bosnet],
j1.CustszAddress_1 [Cust_Address_GMAP],
k.[decAmount_PDR],l.[decAmount_CAS]
FROM dbo.BOS_SD_FTONOOItem a
inner join dbo.BOS_SD_FTONOO b on a.szFTOId = b.szFTOId
LEFT JOIN dbo.BOS_SD_MGM_Area e on b.szSalesId = e.szOpUserId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e1 on e.szTeamId = e1.szTeamId
LEFT JOIN dbo.BOS_PI_Employee e2 on b.szSalesId = e2.szEmployeeId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e21 on e2.szTeamId = e21.szTeamId
LEFT JOIN
(SELECT a.szScheduleId,a.szOpUserId,b.szCustId
FROM dbo.BOS_SD_Route a
INNER JOIN dbo.BOS_SD_RouteItem b on a.szRouteId = b.szRouteId) f on b.szSalesId = f.szOpUserId
and a.szCustId = f.szCustId
LEFT JOIN dbo.BOS_BIZ_PeriodicCalendar g on b.dtmFTO = g.dtmDate
LEFT JOIN dbo.BOS_SD_FSo h on a.szCustId = h.szCustId and b.dtmFTO = h.dtmPrice and b.szSalesId =
h.szSalesId and h.bUploadedFromMoDis = '1'
LEFT JOIN dbo.BOS_SD_FSoTemp h1 on a.szCustNOOId = h1.szCustId and b.dtmFTO = h1.dtmPrice and
b.szSalesId = h1.szSalesId and h1.bUploadedFromMoDis = '1'
LEFT JOIN dbo.BOS_AR_Customer i on a.szCustId = i.szCustId
LEFT JOIN View_EMDR_AR_Cust_District j on a.szCustId = j.szCustId
LEFT JOIN dbo.EMDR2_AR_Cust_Latlong j1 (READPAST) on i.szLatitude = j1.szLatitude and
i.szLongitude = j1.szLongitude
LEFT JOIN [dbo].[View_EMDR_AR_Cust_LatlongApi] j2 on ROUND(a.szLatitude,5) = j2.[szLatitude_Area]
AND ROUND(a.szLongitude,5) = j2.[szLongitude_Area]
-- PDR INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,a.dtmPdrReceipt,SUM(b.decAmount)[decAmount_PDR]
FROM dbo.BOS_CAS_FPdrReceipt a
INNER JOIN dbo.BOS_CAS_FPdrReceiptItem b on a.szFPdrReceiptId = b.szFPdrReceiptId
WHERE a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,a.dtmPdrReceipt) k on a.szCustId = k.szCustId and b.szSalesId =
k.szDeposanId and b.dtmFTO = k.dtmPdrReceipt
-- CAS INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment),
0)[dtmFCustPayment],
SUM(b.decPaidByCashReceipt)[decAmount_CAS]
FROM dbo.BOS_AR_FCustPayment a
INNER JOIN dbo.BOS_AR_FCustPaymentItem b on a.szFCustPaymentId = b.szFCustPaymentId
Where a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment), 0)
HAVING SUM(b.decPaidByCashReceipt) > 0) l on b.dtmFTO = l.dtmFCustPayment and a.szCustId =
l.szCustId and b.szSalesId = l.szDeposanId
-- Visibility Info --
LEFT JOIN
(SELECT
a.szCustId,a.dtmDate,a.szVisibilityId,a.dtmLastUpdated,a.bVisible,a.szWorkplaceId,a.szSalesId
FROM dbo.BOS_SD_VisibilityInCustomer a
INNER JOIN dbo.BOS_PI_Visibility b on a.szVisibilityId = b.szVisibilityId and b.szVisibilityType
= 'Gagal Scan GPS'
Where a.bVisible = '1') m on a.szCustId = m.szCustId and b.dtmFTO = m.dtmDate and b.szSalesId =
m.szSalesId and b.szWorkplaceId = m.szWorkplaceId
WHERE b.bApplied = '1'
AND b.dtmFTO >= (Select Case when DB_NAME() like '%_REPL%' then
DATEADD(yy,DATEDIFF(yy,0,GETDATE())-5,0) Else (Select top 1 b.dtmStart from dbo.BOS_GL_AccPeriod
a
inner join dbo.BOS_GL_AccountingCalendarItem b on a.szAccPeriodNm = b.szAccPeriodNm and
a.szAccPeriodStatus = 'OPE') end as [DATELIMITER])
UNION ALL
-- OUT OF ROUTE --

32
SELECT b.szWorkplaceId,(SELECT TOP 1 zz.szName from dbo.BOS_GL_Workplace zz Where b.szWorkplaceId
= zz.szWorkplaceId)[szWorkplaceNm],
ISNULL(e.szTeamId,e2.szTeamId)[szTeamId],
CASE WHEN e1.bEnableOrder = '1' and e1.bEnableActivation = '1' then 'ORDER/ACT'
WHEN e21.bEnableOrder = '1' and e21.bEnableActivation = '1' then 'ORDER/ACT'
When e1.bEnableOrder = '1' and e1.bEnableActivation = '0' then 'ORDER'
When e21.bEnableOrder = '1' and e21.bEnableActivation = '0' then 'ORDER'
When e1.bEnableOrder = '0' and e1.bEnableActivation = '1' then 'ACTIVATION'
When e21.bEnableOrder = '0' and e21.bEnableActivation = '1' then 'ACTIVATION' Else ''
END AS [Team_Type] ,
b.szSalesId,
(SELECT TOP 1 UPPER(zz.szName) from dbo.BOS_PI_Employee (READPAST) zz Where b.szSalesId =
zz.szEmployeeId)[szSalesNm],
(SELECT b1.[szName] FROM dbo.BOS_PI_Employee a
INNER JOIN dbo.BOS_Pi_Department b1 on a.szDepartmentId = b1.szDepartmentId
Where a.szEmployeeId = b.szSalesId) [Department],
b.dtmFTO,b.szFTOId,UPPER(b.szBaseRouteId)[szBaseRouteId],
f.szScheduleId,CASE WHEN DATENAME(dw,b.dtmFTO) = 'Sunday' then 'MINGGU'
WHEN DATENAME(dw,b.dtmFTO) = 'Monday' then 'SENIN'
WHEN DATENAME(dw,b.dtmFTO) = 'Tuesday' then 'SELASA'
WHEN DATENAME(dw,b.dtmFTO) = 'Wednesday' then 'RABU'
WHEN DATENAME(dw,b.dtmFTO) = 'Thursday' then 'KAMIS'
WHEN DATENAME(dw,b.dtmFTO) = 'Friday' then 'JUMAT' ELSE 'SABTU' END AS
[Hari],g.[szYWeek][szYWeek],CASE WHEN g.[szYWeek] % 2 = 0 then 'GENAP' ELSE 'GANJIL' END AS [Type
Week],
NULL[No.Urut],a.szCustId,
(SELECT top 1 UPPER(zz.szName) FROM dbo.BOS_AR_Customer (READPAST) zz Where a.szCustId =
zz.szCustId)[szCustNm],
a.dtmStartVisit,a.dtmEndVisit,a.decVisitSpendTime,
CASE WHEN a.dtmEndVisit = '1900-01-01 00:00:00.000' then
CONVERT(TIME(0),cast(dateadd(second, datediff(second, a.dtmStartVisit, a.dtmStartVisit),
'19000101') AS TIME)) ELSE
CONVERT(TIME(0),cast(dateadd(second, datediff(second, a.dtmStartVisit, a.dtmEndVisit),
'19000101') AS TIME)) END AS[VisitSpendTime],'OUTROUTE'[Type],
CASE WHEN a.szLatitude in ('','0') then '' ELSE a.szLatitude END AS [szLatitude],
CASE WHEN a.szLongitude in ('','0') then '' ELSE a.szLongitude END AS [szLongitude],
CASE WHEN h.decAmount > 0 and h.bVoid = '0' then '1' ELSE '0' END AS [bSuccess],
CASE WHEN a.szReasonId = '' and h.decAmount > 0 and h.bVoid = '0' then 'Sukses' ELSE
CONCAT(a.szReasonId,'|',(SELECT top 1 zz.szDescription from dbo.BOS_GEN_Reason zz Where
a.szReasonId = zz.szReasonId )) END AS [szReasonNm],
CASE WHEN a.szLatitude in ('','0') then '0'
WHEN a.szLongitude in ('','0') then '0' ELSE '1' END AS [bGPSScanSuccess],
CASE WHEN a.szGPSScanFailReasonId = '' then '' ELSE
CONCAT(a.szGPSScanFailReasonId,'|',(SELECT top 1 zz.szDescription from dbo.BOS_GEN_Reason zz
Where a.szGPSScanFailReasonId = zz.szReasonId )) END AS [szGPSScanFailReasonNm],
ISNULL(m.bVisible,0) [bVisible],h.dtmOrder,
h.[szFSoId][szFSoId],
(SELECT TOP 1 zz.szDoId FROM dbo.BOS_SD_FDo zz Where h.szFSoId = zz.szFSoId ORDER by
zz.dtmCreated Desc )[szDoId],
h.decAmount [decAmount],
CASE WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 0 then
'Tidak Order'
WHEN h.szStatus = 'OPE' and isnull(h.[decAmount],0) = 0 and h.bAlreadyTransferred = 1 then
'Tidak Kunjungan'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '0' then 'DRAFT'
When h.szStatus = 'OPE' and h.bApplied = '0' and h.bVoid = '1' then 'BATAL'
Else h.szStatus END AS [Status_Order],
d.[Count][ItemCount_StockCount],d.SumQty[SumQty_StockCount],
(SELECT TOP 1 zz.dtmUpload FROM dbo.BOS_MD_UploadHistory zz Where zz.szDFsDocId =
h.szFSoId)[dtmUpload],
CASE WHEN i.szLatitude in ('','0') then '' Else i.[szLatitude] END AS [szLatitude_Cust],
CASE WHEN i.szLongitude in ('','0') then '' Else i.[szLongitude] END AS [szLongitude_Cust],
Concat(i.szLatitude,' ',i.szLongitude)[Customer_Location],
Concat(a.szLatitude,' ',a.szLongitude)[Input_Location],
Case when Concat(a.szLatitude,' ',a.szLongitude) = '0 0' then NULL
when Concat(a.szLatitude,' ',a.szLongitude) = '' then NULL
when Concat(i.szLatitude,' ',i.szLongitude) = '' then NULL
Else
ROUND((geography::Point(i.szLatitude, i.szLongitude,
4326).STDistance(geography::Point(a.szLatitude, a.szLongitude, 4326))/1000),2)end as
[Jarak_Input],

33
j.szPropinsi,j1.CustszState[szPropinsi_GMAP],j2.CustszState[szPropinsi_Input],
j.szKabupaten,j1.CustszCity[szKabupaten_GMAP],j2.CustszCity[szKabupaten_Input],
j.szKecamatan,j1.CustszAddress_2[szKecamatan_GMAP],j2.CustszAddress_2[szKecamatan_Input],
j.szKelurahan,j1.CustszDistrict[szKelurahan_GMAP],j2.CustszDistrict[szKelurahan_Input],
Concat(i.CustszAddress_1,',Kel.',j.szKelurahan,',Kec.',j.szKecamatan,',
',j.szKabupaten,',',j.szPropinsi)[Cust_Address_Bosnet],
j1.CustszAddress_1 [Cust_Address_GMAP],
k.decAmount_PDR,l.decAmount_CAS
FROM dbo.BOS_SD_FTOOORItem a
INNER JOIN dbo.BOS_SD_FTOOOR b on a.szFToId = b.szFTOId
LEFT JOIN
(SELECT DISTINCT
a.szCustId,a.dtmDate,COUNT(szProductId)[Count],(+SUM(decDisplayQty)+SUM(decRemainQty))[SumQty]
FROM [dbo].[BOS_SD_RemainStockInCustomer] a GROUP BY a.szCustId,a.dtmDate) d on a.szCustId =
d.szCustId and b.dtmFTO = d.dtmDate
LEFT JOIN dbo.BOS_SD_MGM_Area e on b.szSalesId = e.szOpUserId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e1 on e.szTeamId = e1.szTeamId
LEFT JOIN dbo.BOS_PI_Employee e2 on b.szSalesId = e2.szEmployeeId
LEFT JOIN dbo.EMDR_MD_CRMTeamMapping e21 on e2.szTeamId = e21.szTeamId
LEFT JOIN
(SELECT a.szScheduleId,a.szOpUserId,b.szCustId
FROM dbo.BOS_SD_Route a
INNER JOIN dbo.BOS_SD_RouteItem b on a.szRouteId = b.szRouteId) f on b.szSalesId = f.szOpUserId
and a.szCustId = f.szCustId
LEFT JOIN dbo.BOS_BIZ_PeriodicCalendar g on b.dtmFTO = g.dtmDate
LEFT JOIN dbo.BOS_SD_FSo h on a.szCustId = h.szCustId and b.dtmFTO = h.dtmPrice and b.szSalesId =
h.szSalesId and h.bUploadedFromMoDis = '1'
LEFT JOIN dbo.BOS_AR_Customer i on a.szCustId = i.szCustId
LEFT JOIN View_EMDR_AR_Cust_District j on a.szCustId = j.szCustId
LEFT JOIN dbo.EMDR2_AR_Cust_Latlong j1 (READPAST) on i.szLatitude = j1.szLatitude and
i.szLongitude = j1.szLongitude
LEFT JOIN [dbo].[View_EMDR_AR_Cust_LatlongApi] j2 on ROUND(a.szLatitude,5) = j2.[szLatitude_Area]
AND ROUND(a.szLongitude,5) = j2.[szLongitude_Area]
-- PDR INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,a.dtmPdrReceipt,SUM(b.decAmount)[decAmount_PDR]
FROM dbo.BOS_CAS_FPdrReceipt a
INNER JOIN dbo.BOS_CAS_FPdrReceiptItem b on a.szFPdrReceiptId = b.szFPdrReceiptId
WHERE a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,a.dtmPdrReceipt) k on a.szCustId = k.szCustId and b.szSalesId =
k.szDeposanId and b.dtmFTO = k.dtmPdrReceipt
-- CAS INFO --
LEFT JOIN
(SELECT DISTINCT a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment),
0)[dtmFCustPayment],
SUM(b.decPaidByCashReceipt)[decAmount_CAS]
FROM dbo.BOS_AR_FCustPayment a
INNER JOIN dbo.BOS_AR_FCustPaymentItem b on a.szFCustPaymentId = b.szFCustPaymentId
Where a.bVoid = '0'
GROUP BY a.szDeposanId,b.szCustId,DATEADD(dd, DATEDIFF(dd, 0, a.dtmFCustPayment), 0)
HAVING SUM(b.decPaidByCashReceipt) > 0) l on b.dtmFTO = l.dtmFCustPayment and a.szCustId =
l.szCustId and b.szSalesId = l.szDeposanId
-- Visibility Info --
LEFT JOIN
(SELECT
a.szCustId,a.dtmDate,a.szVisibilityId,a.dtmLastUpdated,a.bVisible,a.szWorkplaceId,a.szSalesId
FROM dbo.BOS_SD_VisibilityInCustomer a
INNER JOIN dbo.BOS_PI_Visibility b on a.szVisibilityId = b.szVisibilityId and b.szVisibilityType
= 'Gagal Scan GPS'
Where a.bVisible = '1') m on a.szCustId = m.szCustId and b.dtmFTO = m.dtmDate and b.szSalesId =
m.szSalesId and b.szWorkplaceId = m.szWorkplaceId
WHERE b.bApplied = '1'
AND b.dtmFTO >= (Select Case when DB_NAME() like '%_REPL%' then
DATEADD(yy,DATEDIFF(yy,0,GETDATE())-5,0) Else (Select top 1 b.dtmStart from dbo.BOS_GL_AccPeriod
a
inner join dbo.BOS_GL_AccountingCalendarItem b on a.szAccPeriodNm = b.szAccPeriodNm and
a.szAccPeriodStatus = 'OPE') end as [DATELIMITER])
)
SELECT * FROM ROUTE_CTE

34

Anda mungkin juga menyukai