LAPORAN KEGIATAN
MAGANG KAMPUS MERDEKA
Oleh:
Julius Christian Simatupang
105220012
Jakarta,.
MENYETUJUI,
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
vi
Daftar Isi
vii
Daftar Algoritma
viii
Daftar Tabel
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.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
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
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
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.
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.
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
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
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]
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
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
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
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-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
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.
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
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
20
Gambar Lampiran 2.3. Execution Running Time ETL 3
21
Gambar Lampiran 2.5. Execution Running Time ETL 5
22
Lampiran III. Bukti Proses Running Data menggunakan metode CTE Rekursif
23
Gambar Lampiran 3.3. Execution Running Time CTE 3
24
Gambar Lampiran 3.5 Execution Running Time CTE 5
25
Lampiran IV. Bukti Proses Running Data menggunakan metode View
26
Gambar Lampiran 4.3. Execution Running Time View 3
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