Archive

SQL Server


Attribute Hour , Minute

http://www.codeproject.com/Articles/25852/Creating-Time-Dimension-in-Microsoft-Analysis-Serv

Advertisements

สมมุติก่อนหน้ามี column ที่เก็บรหัสกำหนด datatype เป็น varchar(3) วันดีคืนดี 3 digit ไม่พอแล้วขยายเป็น varchar(4)

เพราะ update dimension ก็จะได้ error ดังนี้

Cube2

มันจะแจ้ง error message ว่า

“Errors in the back-end database access module. The size specified for a binding was too small, resulting in one or more column values being truncated.”

ก็คือ length ใน dimension ยังไม่ถูกแก้ไขนั้นเอง ถ้าลอง search หาใน google วิธีแก้ปัญหาอันดับ 1 คือ

ไปที่ data source view ที่ใช้สร้าง relation ของแล้วให้ refresh schema แต่ลองทำวิธีนี้แล้วไม่สามารถแก้ปัญหานี้ได้

ก็ให้ไปที่ dimension ที่เราแก้ไข length ของ datatype

พอเปิด dimension ก็จะขึ้นหน้า dimension structure เลือก Column ที่แก้ไข คลิกขวา Properties

ไปที่ Properties -> Key Column -> Data Size ให้แก้ไขเป็น Length ตามที่เราแก้ไขใน database

หลังจากนั้น process cube ใหม่ก็เรียบร้อย

Cube1


ถ้าเรามีไฟล์ที่ถูกระบบอีกระบบ gen มาแล้วเราต้องไปกด download บน website ทุกวัน
เราจะทำมันให้ง่ายขึ้น ได้ไม่ต้องเป็นสาวโรงงาน

1. สร้าง connection สำหรับ connection ไปยังเว็บไซด์ผ่าน http
NewConnection

2. เลือก type เป็น http นะแจ๊ะ
HTTP

3. กำหนดค่า url ที่เราจะไปเอา download file และกำหนด credentials ไปด้วยถ้ามีการกำหนดสิทธิ์ของการ access website ไว้
แต่ถ้ามี policy เรื่องการเปลี่ยน password บ่อยๆ แล้วละก็ใช้ expression ส่งค่า password ผ่านตัวแปรมาละกัน
configHTTP

4. สร้าง file connection สำหรับใช้ save file เวลาทำการ download อย่าลืมตั้งชื่อให้ control ด้วย อันนี้ตั้งชื่อว่า savefilezip ละกัน เป็นการกำหนดด้วยว่าจะ save file ไปไว้ path ไหน
NewFileConnection

5. ลาก script task มาวางและกด edit script
นำ code นี้ไปแปะไว้ใน main() เป็นอันเสร็จพิธี

try
{
Object mySSISConnection = Dts.Connections[“HTTP Connection Manager”].AcquireConnection(null);
HttpClientConnection myConnection = new HttpClientConnection(mySSISConnection);
myConnection.DownloadFile(Dts.Connections[“savefilezip”].ConnectionString, true);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch(Exception ex)
{
Dts.Events.FireError(0, “Download File”, “Download failed: ” + ex.Message, string.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}

code
การทำการงานของ code ก็สร้าง connection ไปที่ http ด้วย Class HttpClientConnection และใช้ function DownloadFile โดย parameter ที่ใส่ชื่อ File Connection ที่เราสร้างเอาไว้นั่นเองงงงงง มาเลิกเป็นสาวโรงงานกัน


ปกติเราสามารถทำการ Log การ execute package ของ SSIS ได้ โดยเราทำการ click right ที่ package แล้วเลือก Logging

Image

 

โดยจะมี provider type ให้เลือกใช้งานหลายรูปแบบด้วยกัน โดยที่ default ของ Provider จะเป็น windows event log

แต่ topic นี้เราจะมาลองใช้ provider type ที่เป็น SQL Server ดู

Image

 

หลังจากกด add ก็ทำการเลือก config connection ที่มี ซึ่งในตัวอย่างนี้ มี connection ที่ใช้ในการ ETL อยู่แล้ว

 

 

 

Image

 

ต่อไปดูมากำหนดค่าที่เราต้องการบันทึก โดยไปที่ tab details จะมี Event ให้เราเลือกว่าเราต้องการ Log event อะไรบ้าง

โดย ผมเลือก OnPreExecute , OnPostExecute

ซึ่งเราสามารถเลือก Advance เพื่อจะกำหนดรายละเอียดแต่ละ Event ต้องการจะบันทึกอะไรบ้าง

 

 

Image

 

โดย package นั้นจะใช้งาน stored procedure “dbo.sp_ssis_addlogentry” ในการบันทึก log ลงตาราง

“sysssislog” ภายใน database connection ที่เราทำการเลือกไว้แต่จะอยู่ภายใต้ “System Tables”

 

 

 

ImageImage

ตัวอย่างข้อมูลที่บันทึกลง sysssislog

Image


Cast string to numeric

syntax  :  (DT_NUMERIC,<<precision>>,<<scale>>)

example : (DT_NUMERIC,18,2)SUBSTRING(LogDetail,17,8)

Cast number to string

syntax : (DT_STR,<<length>>,<<code_page>>)

example : (DT_STR,8,874)TransactionDate

Cast string to date (TransactionDate variable type string)

syntax : (DT_DATE)

example : (DT_DATE)TransactionDate

you can look cast possible type in folder tree ‘Type Casts’

Image

Image


One Cube vs Multiple Cubes

Chris Webb's BI Blog

One of the questions discussed in the book that Marco, Alberto and I wrote last year, “Expert Cube Development with SSAS 2008” (available in all good bookshops, folks!) was whether, if you have multiple fact tables, you should create one big cube with multiple measure groups or multiple cubes each with a single measure group. While I still stand by what we wrote then, I recently took part in an interesting debate on this subject in the MSDN Forum with Akshai Mirchandani from the dev team about the pros and cons of each approach where some interesting new details came to light:

http://social.technet.microsoft.com/Forums/en-US/sqlanalysisservices/thread/681e59bd-93ca-4a91-9f26-8ed96e825553

Here are the main points you need to consider when deciding whether to use the single cube approach or the multiple cube approach. In favour of the multiple cube approach:

  • Having multiple, smaller cubes may result in faster query performance than one large cube in…

View original post 1,027 more words