SQL Server Indonesia User Groups Community March 2009 - Posts - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

March 2009 - Posts

  • Mengatur Permission Role di SSAS

    Dalam beberapa hari terakhir ini ada beberapa rekan, baik itu di milis, forum, dan acara community yang lalu yang menanyakan tentang bagaimana melakukan konfigurasi Role di OLAP. Role adalah asosiasi account user/group yang terdapat di Windows yang memiliki hak akses pada object dan data yang terdapat di SSAS. Adapun object yang diberi hak akses bisa berupa Cube, Dimension, dan data yang terdapat didalam Cube dan Dimension tadi.

    Sebagai contoh, saya akan membuat sebuah role di database Adventure Works DW yang hanya dapat melihat data internet sales di Territory North America. Supaya dapat melihat hasil konfigurasinya, saya akan menggunakan contoh Tablix pada postingan terdahulu. Berikut adalah report yang ditampilkan pada saat user Administrator membuka report. Perhatikan bahwa pada bagian Sales Territory data Europe, North America, dan Pacific ditampilkan.

    image

    Sebelum mulai membuat Role, terlebih dulu tambahkan satu user windows dengan nama NorthAmericaUser di local computer dengan menggunakan Computer Management

    image

    Buka SQL Server Management Studio, pilih Analysis Services sebagai Server Type, isi nama server lalu klik Connect

    image

    Dengan menggunakan object explorer, buka Server > Database > Adventure Works DW, lalu klik kanan pada Roles dan pilih New Role

    image

    Pada page General, isi nama role dengan North America Role, lalu centang pilihan Read definition. Pilihan ini mengijinkan role untuk membaca metadata database

     image

    Pilih tab Membership, klik tombol Add, lalu ketik NorthAmericaUser sebagai user yang akan ditambahkan ke dalam Role

     image

    Pada page Cubes, set Access Adventure Works dengan Read agar role dapat membaca cube

     image

    Buka page Dimension Data, pilih Sales Territory dari combo box Dimension, pilih Sales Territory Group dari combo box Attribute Hierarchy, lalu beri centang hanya untuk North America saja. Setelah selesai, klik OK

    image

    Pada saat user NorthAmericaUser membuka report, data yang ditampilkan adalah data internet sales untuk territory North America saja

    image

  • My SSIS Worst Practice

    Beberapa waktu yang lalu saya melakukan kesalahan besar dengan project SSIS yang saya kerjakan. Yang sedianya saya pikir merupakan Best Practice SSIS berubah menjadi worst practice.

    Menggunakan SQL Server Destination

    Waktu baca di Books Online kalau SQL Server Destination jauh lebih cepat dibandingkan OLE DB Destination, saya dah gatel pengen pake. Soalnya di project-project sebelumnya saya gak pernah dapet kesempatan menggunakan SQL Server Destination karena destination nya bukan SQL Server.

    Ternyata, memang kenceng kalau yang dieksekusi hanya satu package saja. Tapi begitu dah 200-an package yang jalan, bukannya kenceng malah error timeout yang saya dapat. Dan sialnya, behavior error-nya tuh gak pernah sama. Kadang Package A yang fail, kadang package B yang fail, dan seterusnya.

    Akhirnya ke-200-an package itu harus di-rewrite dan SQL Server Destination pun diganti dengan OLE DB Destination. Untungnya dengan sedikit bantuan dari SQL Server SDK hal ini dapat dengan cepat diperbaiki, walaupun menimblkan beberapa masalah kecil yang nggak worst. Heuheuheu.

    Menyimpan Connection String di Environment Variable

    Tadinya saya pikir ini ide yang bagus, karena saya punya dua server. Yang pertama server development dan satunya production. Tapi ternyata, untuk connection string yang didalamnya terdapat informasi sensitive (baca:password) si informasi nya gak bisa dibaca oleh si package. Untuk yang satu ini, saya harus menggantinya dengan cara menyimpan di SQL Server.

    Menggunakan Checkpoint

    Checkpoint adalah hal yang sangat membantu apabila terdapat error di dalam package yang kita kerjakan. Di dalam checkpoint semua konfigurasi dan variable yang terdapat di dalam package disimpan. Di dalam project saya yang lalu, data yang diambil berdasarkan tanggal yang nilainya disimpan di dalam sebuah variable. Sialnya, package yang dieksekusi dari job harian itu fail di hari libur dan pada saat hari kerja ketika datanya di-cek ternyata masih berisi data hari libur.

    Untuk menghindari hal ini, nama file checkpoint harus dibuat dynamic dengan format CheckPoint_yyyy-mm-dd.xml.

     

    Waduh, semoga list wost practice ini gak bertambah lagi yah. Tapi sering-sering cek post ini kalo ternyata saya melakukan worst practice lainnya.

    Supaya kejadian ini gak terjadi lagi, ada beberapa referensi best practice yang saya temukan dan saya coba implementasikan dalam project, diantaranya:

    SSIS Best Practices - Performance

    SSIS: Suggested Best Practices and naming conventions

    Top 10 SQL Server Integration Services Best Practices

  • Unleash The Power of Script Component

    download sample code

    Beberapa hari yang lalu ada teman saya yang bertanya mengenai SSIS pada saya. Berhubung sedang banyak pekerjaan, akhirnya baru sekarang saya bisa menjawab pertanyaannya.

    Teman saya itu bercerita bahwa dia mendapat tugas dari dosennya untuk membuat sebuah ETL menggunakan SSIS yang fungsinya mengisi ID pelajar dengan format 4 digit ID kota + 2 digit ID pelajar. Contohnya adalah sebagai berikut:

    Nama ID Kota ID Pelajar
    A 0001 000101
    B 0001 000102
    C 0002 000201
    D 0003 000301

    Dari table diatas ID Pelajar adalah kombinasi ID Kota ditambah maks ID pelajar yang terdapat di kota tersebut. Sehingga jika ada pelajar baru dengan nama E dengan ID Kota 0004, maka ETL nya harus menghasilkan ID Pelajar 000401 karena belum terdapat data pelajar di kota 0004.

    Apabila kita melihat component-component standar yang terdapat pada SSIS, tentunya kita tidak akan mendapati component yang dapat menghasilkan data yang diinginkan oleh teman saya tadi. Satu-satunya pilihan adalah dengan menggunakan Script Component, yang isinya mendapatkan kombinasi ID Pelajar berdasarkan kotanya.

    Logik nya sendiri cukup mudah. Pada saat preeksekusi package, kita ambil ID kota dan Max ID Pelajar yang terdapat di setiap kota lalu ditampung pada sebuah tempat. Pada saat package dieksekusi, cari ID Kota untuk setiap baris data yang ditransformasi. Apabila ID Kotanya ketemu, maka isi kolom ID Pelajar dengan ID Kota + Max ID Pelajar ditambah 1. Apabila nggak ketemu, tambahkan ID Kota dan ID Pelajar kedalam penampungan sementara.

    Supaya blog nya gak terlalu panjang, saya gak akan menulis semuanya, hanya bagian Script Component nya saja. Untuk melihat keseluruhan package-nya, silakan download sample code-nya.

    Menambahkan Koneksi

    Untuk menambahkan koneksi ke database CampusDB, buka tab Connection Manager, klik tombol Add, lalu pilih CampusDB di column Connection Manager, dan isi Name dengan CampusDBConnection. Koneksi ini kita perlukan untuk mengambil data ID Kota dan Max ID Pelajar di tiap kota.

    image

     

    Menambahkan Input Column

    Pilih tab Input Columns, lalu centang CityCode. Input column ini berfungsi untuk memilih column mana yang akan digunakan pada script dan mendeklarasikan penggunaannya, apakah hanya ReadOnly atau ReadWrite

    image

     

    Menambahkan Output Column

    Untuk menambahkan column output hasil script component, pilih tab Input and Outputs, expand Output 0 > Output Columns lalu klik Add Column. Isi nama column dengan ID, tipe data string[DT_STR] dan length 6.

    image

     

    Script

    Oke, semua yang kita butuhkan sudah siap, sekarang kita mulai the fun part-nya. Untuk mulai menggunakan script component, pilih tab Script, lalu klik tombol Edit Script

    image 

    Tambahkan reference ke Microsoft.SQLServer.ManagedDTS

    image

    Tambahkan import statement (untuk VB) atau using statement (untuk C#) ke System.Data.OleDb. BTW, saya kasih contohnya dalam VB supaya yang *** C# bisa ngelatih C# nya.

    Tambahkan juga dua global variable berikut

    image

    Variable _connection digunakan untuk melakukan koneksi ke database. Yang harus diperhatikan dalam mendeklarasikan tipe datanya adalah bahwa tipenya harus mengikuti tipe connection yang kita buat pada saat meng-create data source. 

    _dtStudent digunakan untuk menyimpan data kota beserta max id pelajarnya. Tentu ini hanya contoh, kita bisa menggunakan tipe data lain sesuai dengan kebiasaan kita.

     

    Melakukan koneksi

    Untuk melakukan koneksi ke database, isi _connection dengan koneksi CampusDBConnection.

    image

     

    Mengambil ID Kota dan Max ID Pelajarnya

    Pengambilan datanya harus dilakukan sebelum package dieksekusi, agar hanya sekali dilakukan dan tidak berulang-ulang untuk setiap row yang ditransformasi. Hal ini tentu dimaksudkan agar tidak terjadi roundtrip dengan server yang akan mengurangi performance dan meningkatkan traffic jaringan.

    image

     

    Mengisi ID Pelajar

    Disinilah proses pengisian max id dimulai. Dan code saya seharusnya sudah menjelaskan semuanya, jadi saya nggak perlu cerita lagi.

    image

  • Spatial in SQL Server 2008 | Presentation Slide and Sample Code

    Pada community event yang lalu, saya dan mas Rachmat Haryanto berkesempatan membawakan sebuah tipe data baru yang terdapat di SQL Server 2008 yaitu Spatial.

    Mungkin diantara rekan-rekan ada yang bertanya kenapa harus berdua? emang gak bisa sendiri? hehe... ada beberapa alasan yang mendasari hal tersebut. Yang pertama adalah karena kami berdua sama-sama ingin tahu mengenai Spatial dan sama-sama ingin menceritakan apa yang kami pelajari dari tipe data baru ini.

    Yang kedua adalah karena kami berdua sadar bahwa masing-masing sama-sama sibuk, dan spatial adalah topik bahasan yang cukup luas sehingga kami berdua membagi tugas untuk topik ini.

    Selain itu, kami juga ingin menunjukkan pada rekan-rekan yang ingin ikut berperan aktif dalam acara community tapi kurang percaya diri, bahwa untuk mengisi sebuah sesi di community event gak mesti sendirian. Rekan dapat mengajak rekan lainnya, atau para SQL Server Group Leader seperti Pak Kiki, Hendra, David, Rachmat, dan Deni.

    Terakhir harapan dari kami berdua adalah sesi kami ini dapat memacu rekan-rekan agar ikut berperan aktif dalam acara community. Saya yakin ada banyak diantara rekan-rekan yang memiliki pengetahuan mengenai SQL Server yang dalam, dan semoga berkenan membantu.

    Untuk yang kemarin gak bisa hadir ke event Essential SQL Server 2008, berikut adalah slide presentasi dan sample code dari materi yang saya bawakan.

    download presentation | download geometry sample code | download geography sample code | download DB Script

  • Menggunakan Calculated Field untuk Mem-Filter Data

    download sample code

    Salah satu fitur yang saya *** dan membantu dari SSRS adalah Calculated Field. Dengan Calculated Field, kita dapat menambahkan sebuah column ke dalam dataset, yang isinya berupa expression dan dapat kita tampilkan pada data region, ataupun digunakan untuk mem-filter data. Yang menjadikannya sangat membantu adalah apabila membutuhkan kalkulasi dari dataset yang sumber datanya dari sebuah OLAP cube, karena tidak perlu menambahkan calculated member di OLAP.

    Mungkin akan timbul pertanyaan kenapa harus menggunakan Calculated Field untuk mem-filter data, bukankah dengan menggunakan Filter kita sudah dapat membuat expression sendiri? Yup, memang betul kita dapat menggunakan expression pada filter, tapi satu hal yang tidak dapat dilakukan dengan filter adalah bahwa kita tidak dapat mengatur operator filter. Mari kita lihat gambar berikut:

    image

    Pada gambar tersebut saya mem-filter data product yang terdapat pada database AdventureWorks dengan Color Black dan ReorderPoint >= 100. Tapi bagaimana apabila saya ingin mem-filter-nya dengan Color Black atau ReorderPoint >= 100? Pada saat seperti inilah kita membutuhkan Calculated Field untuk mem-filter datanya.

    Supaya kelihatan seperti sebuah tutorial (dan kelihatan banyak, hehe), pertama-tama buat dulu Report Server Project di Business Intelligence Development Studio (BIDS) dengan nama CalculatedFieldSample

    image

    Kemudian tambahkan Shared Data Source dengan nama AdventureWorks yang terhubung ke database AdventureWorks

    image 

    Lalu tambahkan sebuah report baru dengan nama ProductReport

    Setelah ProductReport terbuka, tambahkan data source baru dengan nama AdventureWorks menggunakan Shared Data Source AdventureWorks di Report Data pane

    image

    Tambahkan dataset baru dengan nama Product ke dalam data source AdventureWorks untuk men-query data dari table [Production].[Product]

    image

    image

    Disinilah penggunaan Calculated Field untuk mem-filter data dimulai. Klik kanan pada dataset Product lalu pilih Add Calculated Field...

    image

    Tambahkan sebuah Field dengan nama FilterByColorOrReorderPoint lalu klik tombol image untuk menambahkan expression

    image

    Isi expression dengan =Fields!Color.Value="Black" or Fields!ReorderPoint.Value >= 100 lalu klik OK

    image

    Klik OK sekali lagi untuk menutup dialog Calculated Field

    Tambahkan sebuah table pada tab design

    image

    Ubah nama table dengan ProductTable, isi properti DataSetName dengan Product, lalu klik tombol image pada properti Filter

    image

    Klik tombol Add untuk menambahkan filter, isi Expression dengan [FilterByColorOrReorderPoint] dan Value dengan =True lalu klik OK

    image

    Tambahkan colum-column yang ingin ditampilkan pada table, dan tambahkan textbox yang berisi text Product Report diatas table sebagai judul report

    image

    Pada saat di-Preview, product yang ditampilkan adalah Product dengan Color Black atau ReorderPoint >= 100

    image

More Posts
Powered by Community Server (Commercial Edition), by Telligent Systems