Rabu, 10 April 2013

Tipe data dan Model Data



Bottom of Form
Top of Form
Tipe data dalam Model Data
Di Model Data, setiap kolom memiliki tipe data terkait yang menentukan tipe data kolom: bilangan bulat, bilangan desimal, teks, data mata uang, tanggal dan waktu, dan sebagainya. Tipe data juga menentukan jenis pengoperasian yang dapat Anda lakukan pada kolom, dan ruang memori yang diperlukan untuk menyimpan nilai di kolom.
Jika add-in PowerPivot digunakan, Anda dapat mengubah tipe data kolom. Anda mungkin perlu melakukan ini jika kolom tanggal diimpor sebagai string, namun Anda memerlukan tipe data lainnya. Untuk informasi lebih lanjut, lihat Mengatur tipe data kolom di PowerPivot.
Isi artikel
Ringkasan tipe data
Tabel berikut mencantumkan tipe data yang didukung dalam Model Data. Bila Anda mengimpor atau menggunakan nilai dalam rumus, meskipun sumber data asli berisi tipe data yang berbeda, data akan dikonversi ke salah satu tipe data ini. Nilai yang dihasilkan dari rumus juga menggunakan tipe data ini.
Tipe data di Excel
Tipe data di DAX
Deskripsi
Bilangan Bulat
Nilai integer 64 bit (8 byte) 1, 2
Angka tanpa nilai desimal. Integer dapat berupa angka positif atau negatif, namun harus berupa bilangan bulat antara -9.223.372.036.854.775.808 (-2^63) dan 9.223.372.036.854.775.807 (2^63-1).
Bilangan Desimal
Bilangan riil 64 bit (8 byte) 1, 2
Bilangan riil adalah angka yang dapat memiliki nilai desimal. Bilangan riil mencakup rentang nilai yang luas:
Nilai negatif dari -1.79E +308 hingga -2.23E -308
Nilai
Nilai positif dari 2.23E -308 hingga 1.79E + 308
Namun, jumlah digit yang signifikan dibatasi hingga 17 digit desimal.
TRUE/FALSE
Boolean
Nilai Benar atau Salah.
Teks
String
String data karakter Unicode. Dapat berupa string, angka, atau tanggal dalam format teks.
Panjang string maksimum adalah 268.435.456 karakter Unicode (256 megakarakter) atau 536.870.912 byte.
Tanggal
Tanggal/waktu
Tanggal dan waktu dalam representasi tanggal-waktu yang dapat diterima.
Tanggal yang valid adalah semua tanggal setelah 1 Januari 1900.
Mata Uang
Mata Uang
Tipe data mata uang memungkinkan nilai antara -922.337.203.685.477,5808 hingga 922.337.203.685.477,5807 dengan empat digit desimal presisi tetap.
T/A
Kosong
Nilai kosong adalah tipe data di DAX yang menyatakan dan menggantikan null SQL. Anda dapat membuat nilai kosong dengan fungsi BLANK, dan menguji kosong dengan fungsi logika ISBLANK.
1 Rumus DAX tidak mendukung tipe data yang lebih kecil daripada yang tercantum dalam tabel.
2 Jika Anda mencoba mengimpor data yang memiliki nilai numerik sangat besar, impor mungkin gagal dengan kesalahan berikut:
Kesalahan database dalam memori: Kolom '<Nama kolom>' pada tabel '<nama tabel>' berisi nilai '1.7976931348623157e+308', yang tidak didukung. Operasi telah dibatalkan.
Kesalahan ini terjadi karena PowerPivot menggunakan nilai tersebut untuk menyatakan null. Nilai dalam daftar berikut adalah sinonim nilai null:
Nilai

9223372036854775807

-9223372036854775808

1.7976931348623158e+308

2.2250738585072014e-308

Hapus nilai dari data Anda, lalu coba impor kembali.
Tipe Data Tabel
DAX menggunakan tipe data table dalam banyak fungsi, seperti agregasi dan penghitungan inteligensi waktu. Fungsi tertentu memerlukan referensi tabel; fungsi lainnya menghasilkan tabel yang kemudian dapat digunakan sebagai input fungsi lainnya. Dalam beberapa fungsi yang memerlukan tabel sebagai input, Anda dapat menentukan ekspresi yang mengevaluasi tabel; untuk fungsi tertentu, referensi tabel dasar diperlukan. Untuk informasi tentang persyaratan fungsi spesifik, lihat Referensi Fungsi DAX.
Konversi tipe data implisit dan eksplisit dalam rumus DAX
Setiap fungsi DAX memiliki persyaratan spesifik sesuai tipe data yang digunakan sebagai input dan output. Misalnya, fungsi tertentu memerlukan integer untuk sejumlah argumen dan tanggal untuk yang lainnya; sementara fungsi lainnya memerlukan teks atau tabel.
Jika data dalam kolom yang Anda tentukan sebagai argumen tidak kompatibel dengan tipe data yang diperlukan oleh fungsi, DAX dalam banyak kasus akan menampilkan kesalahan. Namun, jika memungkinkan DAX akan berupaya mengkonversi data secara implisit ke tipe data yang diperlukan. Misalnya:
  • Anda dapat mengetik tanggal sebagai string, dan DAX akan mengurai string dan berupaya mengubahnya menjadi salah satu format tanggal dan waktu Windows.
  • Anda dapat menambahkan TRUE + 1 dan mendapatkan hasil 2 karena TRUE dikonversi secara implisit ke angka 1 dan operasi 1+1 dilakukan.
  • Jika Anda menambahkan nilai dalam dua kolom, dan satu nilai dinyatakan sebagai teks ("12") sementara yang lainnya sebagai angka (12), DAX akan mengubah string menjadi angka secara implisit, lalu melakukan penambahan untuk hasil numerik. Ekspresi berikut memberikan hasil 44: "22" + 22
  • Jika Anda berupaya menggabungkan dua angka, Excel akan menampilkannya sebagai string, lalu menggabungkan. Ekspresi berikut menghasilkan "1234": = 12 & 34
Tabel berikut merangkum konversi tipe data implisit yang dilakukan dalam rumus. Excel melakukan konversi implisit bila memungkinkan, seperti yang diperlukan oleh operasi tertentu.
Tabel Konversi Data Implisit
Tipe konversi yang dilakukan ditentukan oleh operator, yang menggabungkan nilai yang diperlukan sebelum melakukan operasi yang diminta. Tabel mencantumkan operator, dan menunjukkan konversi yang dilakukan pada setiap tipe data dalam kolom bila dipasangkan dengan tipe data pada baris yang beririsan.
 Catatan   Tipe data teks tidak disertakan dalam tabel ini. Bila angka dinyatakan sebagai format teks, dalam beberapa kasus PowerPivot akan mencoba menentukan tipe angka dan menyatakannya sebagai angka.
Penambahan (+)
Operator (+)
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
BILANGAN BULAT
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
MATA UANG
MATA UANG
MATA UANG
RIIL
Tanggal/waktu
RIIL
RIIL
RIIL
RIIL
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Misalnya, jika bilangan riil digunakan dalam operasi penambahan bersama data mata uang, kedua nilai ini akan dikonversikan ke RIIL, dan hasilnya ditampilkan sebagai bilangan RIIL.
Pengurangan (-)
Dalam tabel berikut, header baris adalah bilangan yang dikurangi (sisi kiri) dan header kolom adalah bilangan pengurang (sisi kanan).
Operator (-)
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
BILANGAN BULAT
BILANGAN BULAT
MATA UANG
RIIL
RIIL
MATA UANG
MATA UANG
MATA UANG
RIIL
RIIL
RIIL
RIIL
RIIL
RIIL
RIIL
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Tanggal/waktu
Misalnya, jika tanggal digunakan dalam operasi pengurangan bersama tipe data lainnya, kedua nilai ini akan dikonversikan ke tanggal, dan nilai yang dihasilkan juga berupa tanggal.
 Catatan   Model data juga mendukung operator unary, - (negatif), namun operator ini tidak mengubah tipe data operand.
Perkalian (*)
Operator (*)
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
BILANGAN BULAT
BILANGAN BULAT
MATA UANG
RIIL
BILANGAN BULAT
MATA UANG
MATA UANG
RIIL
MATA UANG
MATA UANG
RIIL
RIIL
MATA UANG
RIIL
RIIL
Misalnya, jika integer digabungkan dengan bilangan riil dalam operasi perkalian, kedua angka ini akan dikonversikan ke angka riil, dan nilai yang dihasilkan juga bilangan RIIL.
Pembagian (/)
Dalam tabel berikut, header baris adalah pembilang dan header kolom adalah penyebut.
Operator (/)
(Baris/Kolom)
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
BILANGAN BULAT
RIIL
MATA UANG
RIIL
RIIL
MATA UANG
MATA UANG
RIIL
MATA UANG
RIIL
RIIL
RIIL
RIIL
RIIL
RIIL
Tanggal/waktu
RIIL
RIIL
RIIL
RIIL
Misalnya, jika integer digabungkan dengan nilai mata uang dalam operasi pembagian, kedua nilai ini akan dikonversikan ke angka riil, dan hasilnya juga berupa bilangan riil.
Operator perbandingan
Dalam ekspresi Boolean, nilai dianggap lebih besar daripada nilai string dan nilai string dianggap lebih besar daripada nilai numerik atau tanggal/waktu; angka dan nilai tanggal/waktu dianggap memiliki peringkat yang sama. Konversi implisit tidak dilakukan untuk Boolean atau nilai string; BLANK atau nilai kosong dikonversi ke 0/""/false, tergantung pada tipe data nilai lainnya yang dibandingkan.
Ekspresi DAX berikut menampilkan aktivitas ini:
=IF(FALSE()>"benar","Ekspresi benar", "Ekspresi salah"), returns "Ekspresi benar"
=IF("12">12,"Ekspresi benar", "Ekspresi salah"), returns "Ekspresi benar".
=IF("12"=12,"Ekspresi benar", "Ekspresi salah"), returns "Ekspresi salah"
Konversi dilakukan secara implisit untuk tipe numerik atau tanggal/waktu dalam tabel berikut:
Operator Perbandingan
BILANGAN BULAT
MATA UANG
RIIL
Tanggal/waktu
BILANGAN BULAT
BILANGAN BULAT
MATA UANG
RIIL
RIIL
MATA UANG
MATA UANG
MATA UANG
RIIL
RIIL
RIIL
RIIL
RIIL
RIIL
RIIL
Tanggal/waktu
RIIL
RIIL
RIIL
Tanggal/waktu
Menangani nilai kosong, string kosong, dan nilai nol
Di DAX, null, nilai kosong, sel kosong, atau nilai yang tidak ada dinyatakan oleh tipe nilai baru yang sama, yakni BLANK. Anda juga dapat membuat nilai kosong dengan fungsi BLANK, atau menguji nilai kosong dengan fungsi ISBLANK.
Penanganan nilai kosong dalam operasi, seperti penambahan atau penggabungan, tergantung pada masing-masing fungsi. Tabel berikut merangkum perbedaan antara rumus DAX dan Microsoft Excel dalam penanganan nilai kosong.
Ekspresi
DAX
Excel
BLANK + BLANK
BLANK
0 (nol)
BLANK +5
5
5
BLANK * 5
BLANK
0 (nol)
5/BLANK
Tidak Terhingga
Kesalahan
0/BLANK
NaN
Kesalahan
BLANK/BLANK
BLANK
Kesalahan
FALSE ATAU BLANK
FALSE
FALSE
FALSE DAN BLANK
FALSE
FALSE
TRUE ATAU BLANK
TRUE
TRUE
TRUE DAN BLANK
FALSE
TRUE
BLANK ATAU BLANK
BLANK
Kesalahan
BLANK DAN BLANK
BLANK
Kesalahan
Untuk informasi rinci tentang penanganan nilai kosong oleh fungsi atau operator tertentu, lihat masing-masing topik untuk setiap fungsi DAX dalam bagian Referensi Fungsi DAX.
Apakah artikel ini membantu Anda?

Berlaku pada:
Excel 2013, PowerPivot in Excel 2013
Lihat Juga:
Bottom of Form
Microsoft
© 2013 Microsoft Corporation. Semua hak dilindungi undang-undang.
 
PL/SQL menggunakan dua tipe cursor: implisit dan eksplisit. PL/SQL mendeklarasikan cursor secara implisit untuk seluruh perintah-perintah manipulasi data SQL, termasuk query-query yang hanya menghasilkan satu baris data. Namun, untuk query-query yang menghasilkan lebih dari satu baris data, kita harus mendeklarasikan cursor eksplisit, menggunakan cursor FOR loop, atau menggunakan klausa BULK COLLECT.
Explicit Cursors
Kumpulan baris-baris data yang dihasilkan oleh query dapat terdiri dari nol, satu, atau banyak baris data, bergantung pada berapa banyak baris-baris data yang sesuai dengan kriteria pencarian yang kita inginkan. Ketika query menghasilkan banyak baris data, kita dapat secara eksplisit mendeklarasikan cursor untuk memproses baris-baris data tersebut. Lebih luas lagi, kita dapat mendeklarasikan cursor di dalam bagian deklaratif dari suatu blok PL/SQL, subprogram, atau package.

Kita menggunakan tiga perintah untuk mengontrol cursor: OPEN, FETCH, dan CLOSE. Pertama, kita menginisialisasi cursor dengan perintah OPEN, yang mana mengidentifikasi result set. Kemudian, kita dapat mengeksekusi FETCH secara berulang-ulang sampai seluruh baris-baris data ditampilkan, atau kita dapat menggunakan klausa BULK COLLECT untuk menampilkan seluruh baris-baris data sekali saja. Ketika baris data terakhir selesai diproses, kita membebaskan cursor dengan perintah CLOSE. Kita dapat memproses beberapa query di secara paralel dengan mendeklarasikan dan membuka beberapa cursor.

Ketika kita mendeklarasikan cursor, kita menamainya dan menghubungkannya dengan query tertentu dengan menggunakan sintaks :


CURSOR cursor_name [(parameter[, parameter]...)]
[RETURN return_type] IS select_statement;

Dimana return_type harus merepresentasikan record atau baris data di dalam database table, dan parameter terdiri dari sintaks berikut ini:

cursor_parameter_name [IN] datatype [{:= | DEFAULT} expression]


Sebagai contoh, kita dapat mendeklarasikan cursor-cursor bernama c1 dan c2, seperti berikut ini:

Declare
Cursor c1 is
    SELECT empno, ename, job, sal FROM emp
    WHERE sal > 2000;

Cursor c2 RETURN dept%ROWTYPE is
    SELECT * FROM dept WHERE deptno = 10;

Nama cursor merupakan identifier tak terdeklarasi, dan bukan merupakan nama variable PL/SQL. Kita tidak dapat memberikan nilai kepada nama cursor atau menggunakannya di dalam ekspresi. Namun, cursors dan variables mengikuti aturan jangkauan yang sama. Memberikan nama cursor-cursor setelah table-table database diperbolehkan namun tidak direkomendasikan.
Cursor dapat mengambil parameters, yang mana dapat muncul di dalam query terkait dimanapun konstanta dapat muncul. Parameter-parameter formal dari cursor haruslah parameter-parameter IN. Sehingga, mereka tidak dapat mengembalikan nilai ke parameter-parameter aktual. Juka, kita tidak dapat menentukan constraint NOT NULL pada parameter cursor.


Seperti ditunjukkan oleh contoh di bawah ini, kita dapat menginisialisasi parameter-parameter cursor menjadi nilai-nilai default. Dengan demikian, kita dapat melewatka jumlah aktual parameter yang berbeda kepada cursor, menerima atau menimpa nilai-nilai default sesuai keinginan kita. Juga, kita dapat menambahkan nilai parameter-parameter formal tanpa harus mengubah setiap referensi terhadap cursor tersebut.

Declare
CURSOR c1 (low INTEGER DEFAULT 0,
high INTEGER DEFAULT 99) IS SELECT ...

Scope dari parameter-parameter cursor adalah lokal bagi cursor tersebut, artinya bahwa mereka dapat direferensi hanya di dalam query yang ditentukan di dalam deklarasi cursor. Nilai-nilai dari parameter-parameter cursor digunakan oleh query terkait ketika cursor dibuka.

- Membuka Cursor

Membuka cursor mengeksekusi query dan mengidentifikasi result set, yang terdiri dari seluruh baris-baris data yang sesuai dengan kriteria pencarian dari query. Untuk cursor yang dideklarasikan dengan menggunakan klausa FOR UPDATE, perintah OPEN juka mengunci baris-baris data tersebut. Contoh dari perintah OPEN adalah sebagai berikut:

Declare
CURSOR c1 IS
SELECT ename, job
FROM emp
WHERE sal < 3000;
  ...


Begin
OPEN c1;
  ...

End;
/

Baris-baris data di dalam result set tidak ditampilkan ketika perintah OPEN dieksekusi. Sebaliknya, perintah FETCH menampilkan baris-baris data.
Melewatkan Parameter-parameter Cursor

Kita menggunakan perintah OPEN untuk melewatkan parameter-parameter kepada cursor. Kecuali kita ingin menerima nilai default, setiap parameter formal di dalam deklarasi cursor harus memiliki parameter aktual yang sesuai di dalam perintah OPEN. Sebagai contoh, deklarasi cursor berikut ini

Declare
emp_name emp.ename%TYPE;
salary emp.sal%TYPE;
CURSOR c1 (name VARCHAR2, salary NUMBER) IS
SELECT ...

beberapa perintah-perintah berikut ini membuka cursor:

OPEN c1(emp_name, 3000);
OPEN c1('ATTLEY', 1500);
OPEN c1(emp_name, salary);

Di dalam contoh terakhir, ketika identifier salary digunakan di dalam deklarasi cursor, ia mengacu kepada parameter formal. Namun, ketika ia digunakan di dalam perintah OPEN, ia mengacu kepada variable PL/SQL. Untuk menghindari kebingungan, gunakan identifier-identifier yang unik.

Parameter-parameter formal yang dideklarasikan dengan nilai default tidak perlu memiliki parameter aktual yang sesuai. Mereka dapat secara sederhana mengasumsikan nilai-nilai default mereka ketika perintah OPEN dieksekusi.
Kita dapat menghubungkan parameter-parameter aktual di dalam perintah OPEN dengan parameter-parameter formal di dalam deklarasi cursor dengan menggunakan notasi posisi atau penamaan. Tipe-tipe data dari setiap parameter aktual dan parameter formal terkaitnya haruslah kompatibel.
Fetching dengan Cursor
Kecuali kita menggunakan klausa BULK COLLECT (akan kita bicarakan pada bagian berikutnya), perintah FETCH menampilkan baris-baris data di dalam result set sekali pada satu waktu. Setiap fetch menampilkan baris terkini dan kemudian memajukan cursor ke baris berikutnya di dalam result set. Contohnya adalah sebagai berikut:

FETCH c1 INTO my_empno, my_ename, my_deptno;

Untuk setiap nilai kolom yang dihasilkan oleh query yang terkait dengan cursor, harus ada variable yang sesuai, dan bertipe kompatibel di dalam daftar INTO. Khususnya, kita menggunakan perintah FETCH dengan cara berikut:

LOOP
FETCH c1 INTO my_record;
EXIT WHEN c1%NOTFOUND;
-- memproses baris data (record)
END LOOP;

Query dapat mereferensi variable-variable PL/SQL dalam scope-nya. Namun, beberapa variable-variable di dalam query dievaluasi hanya ketika cursor dibuka. Di dalam contoh berikut ini,setiap menampilkan salary dikalikan dengan 2, meskipun factor ditambah setelah setiap fetch:

Declare
my_sal emp.sal%TYPE;
my_job emp.job%TYPE;
factor INTEGER := 2;
CURSOR c1 IS
SELECT factor*sal
FROM emp
WHERE job = my_job;

Begin
  ...


OPEN c1; -- disini faktor sama dengan 2
LOOP
FETCH c1 INTO my_sal;
EXIT WHEN c1%NOTFOUND;
factor := factor + 1; -- does not affect FETCH
END LOOP;
End;
/

Untuk mengubah result set atau nilai-nilai dari variable-variable di dalam query, kita harus menutup dan membuka ulang cursor dengan kumpulan variable-variable input ke nilai-nilai baru mereka.

Namun, kita dapat menggunakan daftar INTO yang berbeda pada fetch-fetch yang terpisah pada cursor yang sama. Setiap fetch menampilkan baris yang lain dan memberikan nilai-nilai kepada variable-variable target, seperti ditunjukkan oleh contoh berikut ini:

Declare
CURSOR c1 IS SELECT ename FROM emp;
name1 emp.ename%TYPE;
name2 emp.ename%TYPE;
name3 emp.ename%TYPE;

Begin
OPEN c1;
FETCH c1 INTO name1; -- ini mem-fetch baris data pertama
FETCH c1 INTO name2; -- ini mem-fetch baris data kedua
FETCH c1 INTO name3; -- ini mem-fetch baris data ketiga  ...
CLOSE c1;
End;
/

DEKLARASI EKSPLISIT DAN IMPLISIT VB.NET

Deklarasi Implisit mempunyai arti bahwa program harus menggunaan statement atau pernyataan untuk mendeklarasikan variabel , berikut adalah statement- statement yang dapat digunakan untuk mendeklarasikan suatu variabel

Dim      (nama variabel) As (tipedata)
Private  (nama variabel) As (tipedata)
Static    (nama variabel) As (tipedata)
Public    (namavariabel) As (tipedata)

Dim, Private, Static dan Public adalah Visual Basic. NET keyword untuk mendeklarasikan area kerja

Deklarasi Implisit digunakan tanpa menggunakan kata kunci, tipe datanya dapat diubah oleh sebuah karakter yang menandai tipe data tersebut

Integer  dapat diubah hanya menjadi karakter  %
Long           &
Single          !
Double        #
Currency    @
String          $

Inti dari keduanya sama saja, yaitu sebagai pendeklarasian variabel, hanya beda dalam penulisannya saja,  deklarasi implisit lebih praktis digunakan, sebagai gambaran

Dim NRP as integer   (Exsplisit)

dengan cara kedua dapat dirubah dengan hanya menuliskan

Dim NRP%   (Implisit)

keduanya memiliki arti yang sama NRP sebagai namavariabel dan kata
Integer juga karakter % sebagai tipe data. Variabel dalam Visual Basic (Deklarasi Variabel)

October 23, 2012 Leave a comment
 Variabel dalam Visual Basic (Deklarasi Variabel)
B.     Variabel dalam Visual Basic
Variabel  digunakan  untuk  menyimpan  nilai  atau  data  yang  dimiliki program  aplikasi  yang  kita  buat.  Nilai  yang  ditampung  atau  disimpan oleh  suatu  variabel dapat berubah  selama program berjalan.
  •  Deklarasi Variabel
Deklarasi variabel harus diletakkan sebelum baris-baris perintah yang menggunakan  variabel  tersebut.  Ada  dua  cara  dalam pendeklarasian  variabel,  yaitu  Deklarasi  Eksplisit  dan  Deklarasi Implisit.
Deklarasi  Eksplisit  dilakukan  dengan  cara  menuliskan  sebuah  kata kunci  diikuti  nama  variabel  serta  tipe  datanya.  Aturan  penulisan deklarasi variabel dengan cara eksplisit sebagai berikut :  <katakunci> <namavariabel> As <TipeData>
 http://unymawlana.files.wordpress.com/2012/10/image0023.png?w=150&h=57
Tabel 2. Kata Kunci Deklarasi Variabel Secara Eksplisit
Contoh deklarasi variabel secara eksplisit adalah :
http://unymawlana.files.wordpress.com/2012/10/image0043.png?w=150&h=37
Deklarasi  Implisit  dilakukan  tanpa  menggunakan  kata  kunci.  Pada deklarasi implisit, sebuah variabel langsung digunakan disertai sebuah karakter khusus yang menandakan tipe data variabel tersebut.
Tabel 3. Beberapa Karakter Untuk Deklarasi Variabel Implisit
http://unymawlana.files.wordpress.com/2012/10/image0142.png?w=150&h=61
Contoh deklarasi secara implisit :
http://unymawlana.files.wordpress.com/2012/10/image0162.png?w=150&h=24
Sebaiknya  setiap  variabel  yang  digunakan  dalam  kode  program dideklarasikan  terlebih  dahulu,  agar  alur  jalannya  program  lebih terkontrol dan mudah dipahami.

0 komentar:

Posting Komentar

Terima kasih atas kunjungan anda bro..!!! Google PageRank Checker Powered by  MyPagerank.Net | Nyantay Broooowwww..... !!! | PageRank Checker