วันอังคารที่ 30 พฤศจิกายน พ.ศ. 2553

SQL Server , Generate scripts for INDEXS, Primary key

http://sqlsrvscrpt.codeplex.com/wikipage?title=DBScript%20Utility&referringTitle=Home&ProjectName=sqlsrvscrpt

Good tool for this case

วันจันทร์ที่ 29 พฤศจิกายน พ.ศ. 2553

Window 64 bit & Microsoft Visual studio , Connect to Oracle problem

Just run
start /B "C:\Progra~2\Microsoft Visual Studio 8\Common7\IDE" "C:\Progra~2\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"


Ref 1. http://www.sqlserverdba.co.cc/2008/12/error-in-initializing-provider-ora.html
Ref 2. http://www.sqlservercentral.com/Forums/Topic330866-150-2.aspx

วันอังคารที่ 23 พฤศจิกายน พ.ศ. 2553

How to drop all tables in SQL Server

Choose database you want to drop all table
and just run this script

  EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

วันพุธที่ 17 พฤศจิกายน พ.ศ. 2553

MDX export Result in Excel 2007

How to fetching result from MDX Command to Excel , MDX Export to Excel
วิธีการรัน MDX Query ผ่าน Excel โดยใช้ odc connection


มีหลายครั้งที่เราต้องการข้อมูลจากการ Execute MDX Query ผ่าน Microsoft SQL Server Management Studio แล้วต้องการ copy ข้อมูลนั้นไปยัง Excel แต่ในบางกรณีที่ข้อมูลมีปริมาณมาก ทำให้ไม่สามารถ Copy ออกมาไ้ด้  จึงได้ลอง Search หาวิธีจนพบว่าสามารถแก้ไข MDX Query ที่อยู่ใน odc File ที่ Excel generate ขึ้นมาได้ ทำให้สามารถ Execute MDX ที่ต้องการผ่าน Excel ได้เลย

C:\Documents and Settings\username\My Documents\My Data Sources\xxxx.odc

ขั้นตอนการ Setting
1  Add new connection ที่ connect ไปยัง OLAP CUBE ที่ต้องการ (ไฟล์นามสกุล odc)
2  เปิดไฟล์ connection ที่ได้ เพื่อแก้ไข Script  ดังนี้

จากเดิม
   <odc:CommandType>Cube</odc:CommandType>
   <odc:CommandText>Cube_TXNs</odc:CommandText>

แก้ไขเป็นดังนี้  
   <odc:CommandType>MDX</odc:CommandType>
   <odc:CommandText>Your MDX Query to be execute </odc:CommandText>
   


ทำการ Save file
ใน MDX Query นี้ห้ามมีการเว้นบรรทัด และเครื่องหมาย comment ใดๆทั้งสิ้นไม่เช่นนั้นตอน execute จะ error


3 เปิด excel ขึ้นมาเพื่อกำการ execute script โดยเลือกที่เมนู
   Data --> Existing connection
   เลือกไฟล์ connection ที่เราต้องการ จะมี popup เพื่อให้เืลือกรูปแบบ และ Destination ของขอ้มูลที่จะวางลงไป  ตอบ OK ได้เลย   แล้วรอผลจากการ Execute ได้เรยครับ

วันจันทร์ที่ 6 กันยายน พ.ศ. 2553

How to show index create date in SQL Server

SELECT name,stats_date(object_id,index_id) as Create_date
From sys.indexes

วันจันทร์ที่ 12 กรกฎาคม พ.ศ. 2553

Reporting Service , Subscription with Windows integrated security

หลังจากพยายามหาวิธีการมานาน สำหรับการทำ Subscription ใน Reporting service
ด้วยการ Connect data source ที่มี Secure เป็นแบบ Windows integrated security  ก็ได้พบซะทีว่า
"มันทำไม่ได้"  - -" แอบเซ็งครับ

REF : http://database.itags.org/sql-server/377790/

Reporting Service connecting to Analysis Service using Data source

ในกรณีที่มีการสร้าง Roles เพื่อ Grant สิทธิ์การเข้าถึงข้อมูลให้แต่ละ User ใน OLAP แล้ว
การที่จะ Deploy Reporting service ให้ทำงานตามสิทธิ์ที่แต่ละ User จะมองเห็นข้อมูลนั้น
อาจจะค่อนข้างยุ่งยากสักนิด แต่สามารถทำได้ ขึ้นอยู่กับว่า OLAP Server และ Report Server
เป็น Server ตัวเดียวกัน หรือแยกกันอยู่ ในกรณีที่เป็นเครื่องเดียวกันจะง่ายกว่านิดหน่อยครับ



กรณีแรก SSAS กับ SSRS อยู่ใน Server ตัวเดียวกัน

การ เข้าใช้งาน Report จะมีการ Set secure 2 ขั้นตอนคือ

1 การ Connect เข้า SSRS
2 การ Connect จาก SSRS --> SSAS (OLAP)

หากขั้นตอนการ Connect จาก SSRS --> SSAS นั้นปัจจุบันใช้ User ที่เป็น Admin ในการ Access
ข้อมูลใน OLAP ซึ่งไม่ว่าตอน Connect เข้า RS จะใช้ User อะไร (เช่น bi_user,oper_user,report_user)
ก็ตาม แต่ตอน Connect เข้า SSAS จะใช้ user Admin เสมอซึ่งจะทำให้ไม่สามารถใช้ความสามารถของ SSAS ในเรื่องของ Roles ได้เลย เนื่องจาก user Admin เป็น user ที่สามารถ Access data ได้ทั้งหมด

จาก Policy ใหม่เรื่องการ Set user authen ในการ Access data
จึงได้ทำ Research วิธีการใช้ Role ใน SSAS ร่วมกับ SSRS

Connect using:

(1) - Credentials supplied by the user running the report
Use as Windows credentials when connecting to the data source

Connection แบบนี้จำเป็นต้อง เลือก Window credentials เสมอ และตอนรันรายงานจะขึ้นให้ใส่ User / Password ทุกครั้งซึ่งคงไม่เหมาะ

(2) - Credentials stored securely in the report server
-Use as Windows credentials when connecting to the data source
-Impersonate the authenticated user after a connection has been made to the data source

Connection ปัจจุบันที่ใช้อยู่คือข้อนี้ ร่วมกับ Option 1

เป็นการระบุไปเลยว่าตอน Access เข้า OLAP จะใช้ User ไหน ซึ่งขัดกับนโยบายใหม่ที่ต้องการ
ให้มีการแบ่งความรับผิดชอบในเรื่อง Enterprise ที่ Key acct ดูแล
Option สองตัวนี้ไม่สามารถใช้ร่วมกันได้
 
 
(3) - Windows integrated security
 
จากการศึกษาถึงวิธีการ Connect วิธีนี้จากเครื่อง TEST
- SSRS (BI-REPORT-SERV)
- SSAS (BI-OLAP-SERV)

กระณีเครื่อง OLAP และ REPORTING เป็นคนละเครื่อง
หากจะใช้วิธีนี้จำเป็นที่จะต้องแก้ไขค่า Configure ใน ReportServer ในส่วนของ Directory Security

- Open IIS -- > Web Sites --> Default Web site
- Right click in "Reports" choose Property
- Select "Directory Security" tab
- Click edit in "Authentication and access control"
- In "Authentication access" Select "Basic authentication (password is sent in clear text)"
- Uncheck "Integrated windows authentication"
ซึ่งปกติแล้วค่า Default จะเป็น "Integrated windows authentication"

แต่หาก SSRS and SSAS เป็นเครื่องเดียวกัน สามารถใช้ Option นี้ได้เลย ไม่จำเป็นต้องแก้ Configure

วันจันทร์ที่ 5 กรกฎาคม พ.ศ. 2553

Visual Totals in MDX and Role Security

MDX , Total All members summary problem
บทความนี้ขอกล่าวถึง Measurement Summary  ในระบบ OLAP ซึ่งมีประโยชน์มากๆ
ในกรณีที่หน่วยงานมีการแบ่งส่วนการดูแลข้อมูล / ลูกค้า / ยอดขายต่าง ๆ แล้ว หากมีการสร้าง Roles ขึ้นมาควบคุมการเข้าถึงข้อมูลแล้ว อาจเคยเจอปัญหาเรื่องยอดรวมเป็นยอดรวมของทั้งหมด แทนที่จะเป็นยอดรวมของลูกค้าที่ดูแล เป็นต้น

ได้ค้นหาข้อมูลจนได้พบว่า จริงๆ แล้วใน Role ที่สร้างขึ้นในส่วนการจำกัดสิทธิ์ (Dimension data) นั้นใน Advance tab นั้นมี Option ให้เลือกซึ่งไม่ได้ Default ไว้ให้ นั่นคือ "Enable Visual Totals" ซึ่งเป็น Option ที่จะคำนวนยอดรวมเฉพาะข้อมูลที่ User มีสิทธิ์เข้าถึงได้เท่านั้น  ซึ่งจริง ๆ แล้วตามหลักการควรจะต้อง Enable option นี้เสมอเมื่อมีการสร้าง Roles ขึ้นมา (อันนี้ขึ้นอยู่กับจุดประสงค์การใช้งาน)





How to set / enable Visual Total in OLAP Roles.

To be continue....


Ref . http://blogs.microsoft.co.il/blogs/barbaro/archive/2008/02/06/visual-totals-in-mdx-and-role-security.aspx

วันจันทร์ที่ 14 มิถุนายน พ.ศ. 2553

SQL Server view table size,index size

How to view Table size , index size
View/show rows in table with out select


Use  "sp_spaceused"

Example 

Use myDB
GO
sp_spaceused "trans"
GO












How to view database information in SQL Server
Use master
GO
sp_helpdb "db_name"
GO


The result will seperate in 2 section
Section 1 : about overall database info , total size , status etc..
Section 2 : about data and log file , location , size etc..

วันพุธที่ 9 มิถุนายน พ.ศ. 2553

SQL Server database collation

ความแตกต่างของ Database Collation
Thai_CI_AI คือ Language ภาษาไทย
   CI = Case Insensitive 
   AI = Accent Insensitive

ต่างกับ Thai_CI_AS คือ
AS = Accent Sensitive

แนะนำใช้ Thai_CI_AI  เพราะ Thai_CI_AS จะมีปัญหาเกี่ยวกับภาษาไทยเรื่องของตัวการันต์
เช่นหากเราเขียน QUERY

SELECT * FROM customer WHERE Name LIKE 'พิมพ%'

หาก Collation เป็น Thai_CI_AS   คนที่ชื่อ พิมพ์ใจ จะไม่ออกมาตามที่ควรจะเป็นครับ
นอกจากนั้นแล้ว Column ใน Table ก็มี Collation ของตัวเองอีกด้วย
ดังนั้นตอน Install Server หรือ Create Database ควรต้องระวังเรื่องนี้ด้วยครับ

วันอังคารที่ 4 พฤษภาคม พ.ศ. 2553

Reporting Service (SSRS) , Subscription Locale

เรื่อง ภาษาของเครื่อง ณ เวลาที่ทำ Reports Subscription
มีความรู้เล็ก ๆ น้อย ๆ มาฝากเกี่ยวกับภาษาของเครื่อง ในตอนที่เราทำ Subscription ครับ
หากรายงานของเรามี parameter ที่เป็นวันที่แล้วต้องการให้มี default เป็นช่วงเวลาที่กำหนด
อย่างของผม กำหนดให้เป็นวันที่ 1 - สิ้นเดือนของเดือนที่ผ่านมา  สามารถทำได้ครับ
โดยการเขียน Script ในตัว parameter ของรายงาน  แต่เมื่อทำ Subscription โดยให้ User สามารถ
ทำเองได้ ปรากฏว่าเจอปัญหาที่ทำเอางงไปครึ่งวันกว่าจะหาเจอว่าเป็นเพราะอะไร
ปัญหาคือ วันที่ที่ได้เขียน Script  ไว้เกิดเพี้ยน  ไม่เป็นไปตามรูปแบบที่ต้องการ ทำให้รายงานรันผิด
ได้พยายามหาสาเหตุอยู่นาน แล้วก็ได้เจอครับ โดยเปิด Database ของ Reporting ขึ้นมาแล้ว
Select ดูจาก table subscriptions ทำให้เห็นความแตกต่างของฟิลด์ ๆ นึงคือ Field "Locale" ครับ
ซึ่งตัวนี้เองเป็นตัวที่กำหนดรูปแบบของวันที่ในรายงานที่ทำ Subscription ผมจึงจัดการ update
โดยใช้ SQL ธรรมดากันเลยครับ  ไม่งั้นต้องมานั่งทำใหม่ใช้เวลานานมาก

SQL script for update locale

UPDATE Subscriptions
set locale ='en-US'
WHERE  locale = 'th-TH'

เท่านี้เป็นอันเรียบร้อยสบายตัวไป ^ ^

วันพุธที่ 28 เมษายน พ.ศ. 2553

Reporting Service (SSRS) , Date format problem in parameter

ปัญหาเรื่องรูปแบบวันที่ใน Parameter ของ Reporting service
จากปัญหาที่พบในเครื่องของ User คือ รูปแบบของวันที่แตกต่างจากที่กำหนดไว้ใน Report
เช่นใน Report กำหนดเป็น mm/dd/yyyy แต่เครื่อง User เป็นแบบ dd/mm/yyyy ทำให้รายงานเกิด Error
ปัญหานี้เกิดขึ้นเนื่องมาจากการ Setting ค่าใน Internet Options ครับให้ดูตามรูปตัวอย่าง


เลือก วันที่จาก Calendar

ค่าที่ได้จากการเลือกวันที่


หากมีการจัดลำดับให้ ภาษาไทยอยู่ก่อน English



จะได้รูปแบบวันที่ที่เปลี่ยนไปตามนี้ จะเห็นว่าจาก 4/28/2010 จะกลายเป็น 28/4/2010

วันจันทร์ที่ 26 เมษายน พ.ศ. 2553

MDX Query : Getdate()

บทความนี้จะอธิบายถึงวิธีการใช้งาน Function Getdate() ใน MDX Query
ปกติหากจะหาวันที่ปัจจุบันใน SQL Server จะใช้ Function Getdate() และจัด Format ตามต้องการ
เช่น  SELECT Convert(char(8),Getdate(),112)
แต่หากเป็นใน MDX Quey แล้ว จะแตกต่างกันไปนิดหน่อยโดยใช้ Function NOW() แทนครับ
ดูตามตัวอย่าง และนำไปประยุกต์ใช้เอาตามชอบใจ


WITH
MEMBER [Measures].[CurYear] as -- Current Year (Full)
Format(NOW(), "yyyy" )
MEMBER [Measures].[CurYearShot] as -- Current Year (With 2 digits)
Format(NOW(), "yy" )
MEMBER [Measures].[CurMonthFull] as -- Current Month (Full)
Format(NOW(),"MMMM")
MEMBER [Measures].[CurMonthNum] as -- Current Month (With 2 digits)
Format(NOW(),"MM")
MEMBER [Measures].[CurDateNum] as -- Current Date (With 2 digits)
Format(NOW(),"dd")
MEMBER [Measures].[CurDateFull] as -- Current Date
Format(NOW(),"d")
MEMBER [Measures].[CurDateFullFormat] as -- Current Date (With custom format)
Format(NOW(),"dd/MM/yyyy")
MEMBER [Measures].[PrvYear] as -- Previous Year
Format(DATEADD("yyyy",-1,NOW()),"yyyy")
MEMBER [Measures].[NxtYear] as -- Next Year
Format(DATEADD("yyyy",1,NOW()),"yyyy")
MEMBER [Measures].[PrvMonth] as -- Previous Month
Format(DATEADD("m",-1,NOW()),"MMMM")
MEMBER [Measures].[NxtMonth] as -- Next Month
Format(DATEADD("m",1,NOW()),"MMMM")
MEMBER [Measures].[PrvDate] as -- Previous Day
Format(DATEADD("d",-1,NOW()),"dd")
MEMBER [Measures].[NxtDate] as -- Next Day
Format(DATEADD("d",1,NOW()),"dd")
MEMBER [Measures].[YearDiff] as -- Difference between 2 years
DATEDIFF("yyyy",DATEADD("yyyy",-1,NOW()),DATEADD("yyyy",3,NOW()))
MEMBER [Measures].[ConvertStrToDate] as -- Convert String to Date
Cdate("1/28/2010")
select {[Measures].[CurYear],[Measures].[CurYearShot],[Measures].[CurMonthFull],[Measures].[CurMonthNum],
[Measures].[CurDateNum],[Measures].[CurDateFull],[Measures].[CurDateFullFormat],
[Measures].[PrvYear],[Measures].[NxtYear],[Measures].[PrvMonth],[Measures].[NxtMonth],
[Measures].[PrvDate],[Measures].[NxtDate], [Measures].[YearDiff],
[Measures].[ConvertStrToDate]} ON 0
FROM [Adventure Works]

วันอังคารที่ 20 เมษายน พ.ศ. 2553

Process OLAP dimensions error , "File system error: A FileStore error from WriteFile occurred. Physical file"

Error issued because "PROCESS UPDATE" large dimensions.
-------------------------------------------------------------
Event Type: Error
Event Source: SQLISPackage
Event Category: None
Event ID: 12550
Date: 4/18/2010
Time: 10:06:35 PM
User: OLAP-SERVER\SQLService
Computer: OLAP-SERVER
Description:
Event Name: OnError
Message: File system error: A FileStore error from WriteFile occurred. Physical file: \\?\E:\ Projects\OLAP\Data\olap_tsc301.0.db\Dim Card.14.dim\77.Dim Card.bsstore. Logical file: . .

Operator: MyServer\SQLService
Source Name: Process OLAP_TSC301 DIM
Source ID: {2cf2f9b3-07fb-490a-abca-eb7cf83c1c2b}
Execution ID: {D0810E33-4776-4B32-A15E-107267F343C4}
Start Time: 4/18/2010 10:06:35 PM
End Time: 4/18/2010 10:06:35 PM
Data Code: -1056833471
--------------------------------------------------------------------------
It happen when your dimension file is growth over 4GB.
And you choose PROCESS UPDATE method to process dimensions.
I have errors issued  and found on google search ,
to solve problem is FULL Process Cube for a moment. And I don't have a permanent solution to fix this problem.

I had this problem many times, until I found a totally unrelated article pertaining to a 4 GB limitation for the .asstore file in MOLAP dimensions. I talked to Microsoft, and they investigated and found that the limitation does exist. If it happens again, I would suggest browsing the data folder where the database exists and opening the failing dimension folder. If you see that the dimension file with a .asstore extension, or any other one that is over 4 GB, you have found your problem. There is nothing short of doing a full process on the dimension (which the Microsoft guy suggested, and I had to yell at him (in a nice way)) when it hits the limit. If you MUST Process Update and you cannot use ProcessAdd on your dimension, I would suggest breaking the dimension in a linear fashion into several dimensions (column by column), or finding a new way to build the dimension where it will not grow exponentially. A Process Update appends string data to the file, and that is why it gets so large. I would also suggest taking a look at the AS dimension and see if there are any character columns you can cut down in size.
Ref site. http://geekswithblogs.net/darrengosbell/archive/2007/04/29/SSAS-ProcessUpdate---Too-much-of-a-good-thing.aspx

วันจันทร์ที่ 5 เมษายน พ.ศ. 2553

Faulting application excel.exe, version 12.0.6425.1000, stamp 49d64dd6, faulting module msvcrt.dll

Faulting application excel.exe, version 12.0.6425.1000, stamp 49d64dd6, faulting module msvcrt.dll
Excel 2007 crash.

Just run regedit and goto

HKEY_Local_Machine\Software\Microsoft\Office\Excel\Addins
then set a BtOfficeAddin.BtOfficeIntegration.1 LoadBehaviour to 0.

วันศุกร์ที่ 2 เมษายน พ.ศ. 2553

MDX Query : Select Except members

MDX Query syntax for "NOT IN" or "Except" condition
มีทริ๊กเล็ก เกี่ยวกับการใช้ MDX ในการ Selelect ข้อมูลให้ได้ตามต้องการ  ในที่นี้หากเทียบกับใน SQL
แล้วก็คือการใช้ IN หรือ NOT IN นั่นเอง 
ตัวอย่าง MDX สำหรับ Condition NOT IN : Using AdventureWork

---------------Normal condition -------------------
ตัวอย่าง Query สำหรับการเรียกดูยอดขายของสินค้าทุกประเภท

SELECT [Measures].[Sales Amount] on 0,
[Product].[Category].[Category] ON 1
FROM [Adventure Works]


Result

              Sales Amount

Accessories   $1,272,057.89
Bikes         $94,620,526.21
Clothing      $2,117,613.45
Components    $11,799,076.66

-------- EXCEPT or NOT IN condition  ---------

SELECT [Measures].[Sales Amount] on 0,
-{[Product].[Category].&[1],[Product].[Category].&[4]} on 1
FROM [Adventure Works]

Result
             Sales Amount
Clothing     $2,117,613.45
Components   $11,799,076.66

จากตัวอย่างจะเห็นว่าผลลัพธ์เหลือแค่ 2 rows คือ  Clothing และ Component
Categories ที่หายไปคือ Accessories และ Bikes ซึ่งเกิดจากการที่เราได้ใส่ Except / Not in
เข้าไปใน Query  นั่นเอง ซึ่งรูปแบบคือ   -{member set}

วันอังคารที่ 30 มีนาคม พ.ศ. 2553

การพิมพ์ Label จาก Crystal report

การกำหนดขนาดกระดาษสำหรับ Print Label ใน Crystal report 
การพิมพ์ Label จาก Crystal report โดยใช้กระดาษต่อเนื่องที่มีขนาดเล็กนั้นอาจมีปัญหาว่า
สร้าง Form กระดาษให้ตรงตามจริงแล้ว ตอนสั่งพิมพ์ไม่สามารถเลือกฟอร์มกระดาษที่กำหนดขึ้นได้

กรณีที่เคยพบคือ ใช้เครื่องพิมพ์ EPSON LQ 2180i พิมพ์ Label แปะซองจดหมายถึงลูกค้า แต่ขนาดของ
Label มีขนาด Width : 11 cm  และ Height : 3.5 cm  ซึ่งเครื่องขนาดของฟอร์มกระดาษเล็กกว่าขนาดที่
เล็กที่สุดที่เครื่องพิมพ์รองรับทำให้เครื่อง Printer ไม่สามารถ Detect เจอ size กระดาษนั้นได้
จึงได้โทรไปสอบถามทาง Epson ถึงวิธีการแก้ไข จึงได้ทราบวิธีที่ง่ายมาก คือเพียงแต่เปลี่ยนไปใช้
Driver ของเครื่องพิมพ์รุ่นที่เก่ากว่า ก็จะทำให้สามารถสั่งพิมพ์ลงใน Form ที่มี ขนาดเล็กได้  แค่นี้เองครับ
ตัวอย่าง เครื่องพิมพ Epson LQ 2180i แทนที่จะใช้ Driver ของรุ่นนี้แต่เปลี่ยนไปใช้ Driver รุ่น
LQ-1170 ESC/P 2 แทน หวังว่า Blog นี้จะช่วยแก้ปัญหาให้หลาย ๆ ท่านได้ครับ

วันจันทร์ที่ 22 มีนาคม พ.ศ. 2553

Internal Error 2755. 1612, Microsoft Visual Studio 2005 SP 1

This error issued when your windows securities is not update
You need to download update for windows  Download Here

วันพฤหัสบดีที่ 18 มีนาคม พ.ศ. 2553

การใช้ SUB Query ใน SQL Command

Sub query คือ การดึงข้อมูลออกเป็นตารางเสมือน ตามเงื่อนไขที่ต้องการเพื่อจุดประสงค์ที่ต้องการ
ซึ่งต้องใช้ ( ) ในการ scope

ตัวอย่างการใช้งาน SUB Query

SELECT a.*
FROM (
  SELECT emp_id,emp_name
  FROM employee
  WHERE emp_id  >= '100111'
) as a

จากตัวอย่างหมายความว่า  เลือกข้อมูลทั้งหมดจากตารางที่มี Alias "a" ซึ่งเป็น Sub query จากการ
Select ข้อมูลจากตาราง employee ที่มี emp_id >= '100111'

การใช้คำสั่ง IN ใน SQL command

คำสั่ง IN ใน Sql หมายถึงการกรองข้อมูลด้วย column  โดยที่ค่าที่ต้องการกรองมีได้มากกว่า 1 ค่า ซึ่งแตกต่างจากการใช้เครื่องหมายเท่ากับ ("=")  และค่าที่ใช้กรองจะต้องอยู่ภายในวงเล็บ

ตัวอย่าง
SELECT *
FROM employee
WHERE emp_id IN ('100234','100235','100236')
ความหมายของ Query นี้คือ การเลือกพนักงานที่มีรหัสตามที่ระบุนั่นเอง ซึ่งผลลัพธ์จะได้ 3 Records

คำสั่ง JOIN ใน SQL

Join ก็คือ "ร่วมกัน" , "เชื่อมต่อ" ดังนั้นก็คือการเชื่อมโยงตารางเข้าด้วยกันนั่นเอง และการ join table
มีหลายรูปแบบซึ่งใช้งานแตกต่างกันออกไป

รูปแบบของการ JOIN ที่ใช้กันบ่อย ๆ มีดังนี้
INNER JOIN  คือ ค่าของ column ที่ใช้ในการ join จะต้องมีค่าตรงกันเท่านั้น แถวของข้อมูลที่ตรงตามเงื่อนไขนี้เท่านั้นที่จะแสดงผลออกมาจากการ Query

LEFT JOIN  คือ แถวจากตารางหลัก(ทางซ้าย)จะออกมาเสมอ แม้ว่าจะไม่มีข้อมูลที่ตรงกันในตารางที่เชื่อมโยงไป

RIGHT JOIN จริง ๆ แล้วเหมือนกับ LEFT JOIN เพียงแต่สลับตำแหน่งของตารางที่ใช้ในการเชื่อมโยงข้อมูลเท่านั้น
(ไม่แนะนำให้ใช้ ใช้ LEFT JOIN แทนดีกว่า จะได้ไม่สับสน)


ตัวอย่าง

/* INNER JOIN */
SELECT e.emp_id,e.emp_name,d.dept_name
FROM employee as e
INNER JOIN department as d ON e.dept_id = d.dept_idORDER BY d.dept_id,e.emp_id

ความหมายคือ  เลือกพนักงานทุกคนที่มีรหัสแผนกตรงกับในตารางแผนก
หากพนักงานคนใดยังไม่รหัสแผนกคือ dept_id  ข้อมูลพนักงานรายนั้นจะไม่แสดงใน Query นี้


/* LEFT JOIN */
SELECT e.emp_id,e.emp_name,d.dept_name
FROM employee as e
LEFT JOIN department as d ON e.dept_id = d.dept_id

ความหมายคือ เลือกพนักงานทุกคนที่มีรหัสแผนกตรง หรือ ไม่ตรงกับในตารางแผนกออกมาทั้งหมด
ถึงแม้ว่าพนักงานบางรายจะยังไม่มีรหัสแผนก ข้อมูลพนักงานรายนั้นก็จะยังแสดงออกมาด้วย
เพียงแต่ว่าค่าใน column "dept_name" จะเป็นค่า NULL เท่านั้นเอง

การใช้ Alias แทนชื่อคอลัมน์เดิมในคำสั่ง SQL

ลักษณะเช่นเดียวกับการใช้ Alias แทนชื่อตาราง เพียงแต่เปลี่ยนมาใช้แทนในส่วน column name
ตัวอย่าง

SELECT e.emp_id as   employee_id, e.emp_name as employee_name
FROM  employee as e

จากตัวอย่างคือ การตั้งชื่อ column ใหม่จาก SQL Query จากเดิม emp_id เป็น employee_id
และจาก emp_name เป็น employee_name

การใช้ Alias แทนชื่อตารางในคำสั่ง SQL

เปรียบเหมือนการตั้งชื่อเล่นให้กับบุคคล เช่นคนที่ชื่อยาว ๆ ก็มีชื่อเล่นให้เรียกง่าย ๆนั่นเอง

ตัวอย่างการใช้ Alias ในคำสั่ง SQL

SELECT e.emp_id,e.emp_name,e.salary 
FROM employee as e 

คำสั่ง Group By ใน SQL

คำสั่ง Group By ใน SQL คือคำสั่งที่ใช้จัดกลุ่ม column จากการ Select ข้อมูล ซึ่งต้องใช้ร่วมกับ Aggregate function เช่น
-Count , Sum , Max , Min , Avg

ตัวอย่างการใช้ Group by

SELECT dept_no,COUNT(emp_id) as emp_count,SUM(salary) as sum_salary,MAX(salary) as max_salary,MIN(salary) as min_salary,AVG(salary) as avg_salary
FROM emp
GROUP BY dept_no

ความหมายของ Query นี้คือ การ นับจำนวนพนักงาน,ยอม Summary ของเงินเดือน ,เงินสูงสุด , เงินเดือนต่ำสุด และเงินเดือนเฉี่ยของพนักงาน ตามรหัสแผนกนั่นเอง

คำสั่ง SQL , SQL Command

SQL คือ Simple Query Language (ย่อมาจาก) แปลตรง ๆ ก็คือ ภาษาพื้นฐานที่ใช้ในการสืบค้นข้อมูลนั่นเอง
SQL Query ส่วนใหญ่แล้วจะมี Syntax ที่คล้าย ๆ แตกต่างกันเพียงรายละเอียดปลีกย่อยเท่านั้น
การที่จะทำความเข้าใจกับ SQL ไม่ใช่เรื่องยาก เพียงแต่จะต้องมีความเข้าใจพื้นฐานสักเล็กน้อย
เกี่ยวกับฐานข้อมูล ซึ่งก็มีมากมายให้เลือกใช้ครับ ตั้งแต่ของฟรีไปยังที่ต้องจ่ายเงิน(มาก)
ตัวอย่าง Free Database ก็เช่น Mysql , SQL Server Express Edition,
ส่วนที่ต้องเสียเงินก็เช่น SQL Server 2005,2008 , Microsoft Access, ORACLE , DB2

คำสั่ง SQL พื้นฐาน 

SELECT  FROM WHERE ORDER BY

SELECT : คือ "การเลือก" ความหมายก็ตรงตัว
FROM : คือ "จาก"

WHERE : คือ "ที่ตรงตามเงื่อนไข"
ORDER BY : คือ "การเรียงลำดับข้อมูล"  ASC (Ascendant) คือจากน้อยไปหามาก , DESC (Descendant) คือ จากมากไปหาน้อย
หากไม่ใส่ ASC / DESC ค่า Default จะเป็น ASC


ดังนั้น SELECT FROM WHERE  + ORDER BY ก็คือ การเลือกข้อมูลจากแหล่งข้อมูล (ตาราง / Table,View) ที่ต้องการ
โดยสามารถระบุเงื่อนไขลงไปนั่นเอง

ตัวอย่างเช่น
SELECT * FROM employee ORDER BY emp_id ASC
ก็หมายความว่าเลือกทุกคอลัมน์จากตาราง employee โดยเรียงลำดับด้วยฟิลด์ emp_id จากน้อยไปหามาก

การใช้ WHERE ใน SQL
SELECT * FROM employee
WHERE emp_id ='100234'
หมายความว่า เลือกข้อมูลทุกคอลัมน์จากตาราง employee ที่ค่าในคอลัมน์ emp_id เท่ากับ '100234'

SELECT * FROM employee
WHERE emp_id LIKE '100%'
หมายความว่า เลือกข้อมูลทุกคอลัมน์จากตาราง employee ที่ค่าในคอลัมน์ emp ขึ้นต้นด้วย '100'
ค่าที่เหลือจะเป็นอะไรก็ได้

SELECT emp_id,emp_name,tel_no,salary,(salary *1.1) as new_salary
FROM employee
ORDER BY salary DESC
หมายความว่า เลือกข้อมูล ตาม column ที่ระบุ  และมีการคำนวนค่าจาก column เงินเดือนเพิ่มเติม
จากตาราง employee โดยขึ้นเงินเดือน 10% (salary *1.1)

วันจันทร์ที่ 15 มีนาคม พ.ศ. 2553

Error Restore database in sql server 2005 Express

RestoreContainer::ValidateTargetForCreation
ในกรณีที่เคยเจอว่าไม่สามารถ Restore database ที่ Backup จากเครื่องอื่นลงเครื่องเราได้
ให้ลอง Check ใน Configuration manager ดังนี้
- Open SQL Server configuration manager
- Choose SQL Server 2005 service
- Right click on your sql server instant and select properties
- On logon tab --> Select "build in account"
- Select "Local System" from drop down list

Site Ref : http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/7b259f06-e1e2-47f5-8303-77775ee80400

Error installation sql server 2005 express , MSXML 6.0

เกิดจากการที่ Version ของ MSXML6 ที่มีในเครื่องใหม่กว่า Version ที่กำลังจะ Install
ให้ Remove ของเดิมออกก่อน โดยใช้โปรแกรม Windows Install cleanup
รายละเอียดของวิธีการ
http://support.microsoft.com/kb/968749

วันพุธที่ 10 มีนาคม พ.ศ. 2553

Crystal report 2008 BUG , Service pack , Patch update

 -Crystal report 2008 problem : Can not refresh table schema / Storprocedure  selected field
  (คริสตัลรีพอร์ท ไม่ update field เมื่อมีการแก้ไข ตาราง หรือ storprocedure )
-Crystal report 2008 problem : Line can not drag or move to the end of paper when set to "Landscape"
  (คริสตัลรีพอร์ท ไม่สามารถลากเส้นสุดขอบด้านขวาได้ ถ้าเซ็ตกระดาษเป็นแนวนอน)

นอกเรื่องจาก SQL Server ,BI นิดนึงครับ แต่ยังคงเกี่ยวกับเรื่องการทำรีพอร์ท
จะขอพูดถึง Crystal report 2008 สักหน่อย  พอดีมีโอกาสได้ใช้งาน Tools version นี้ ซึ่งจริง ๆ ก็เคยใช้
version ก่อน ๆ มานิหน่อยครับ 
แต่ว่า ต้องเจอกับปัญหาที่ไม่น่าเชื่อ   ว่ามันจะมีอยู่จริงใน Software ระดับนี้ครับ (BO ซื้อมาทำ)
ตอนแรกก็งง ก่งก๊งกันไป ถามเพื่อน  เพื่อนก็ตอบไม่ได้  ผลสุดท้ายก็ Google ครับ อาจจะเริ่มงงว่าเกิดไรขึ้น
ตอนแรกที่ได้ใช้
ก็ Install ปกติ (เพื่อนเอาแผ่นมาให้) ก็ใช้ ๆ ไปครับปัญหาที่เจอตามนี้เลย


 1. field ในฐานข้อมูลเปลี่ยน Report ที่เคยทำไว้ก่อนหน้า Refresh ให้ตายก็ไม่เปลี่ยนตาม
   ไม่ว่าจะเป็น Field name , Data type , แม้กระทั่ง Field ที่เพิ่มมาใหม่ก็ไม่เห็นหัวมัน - -" คิดูแล้วกัน

 2.อยากทำรายงานขนาดกระดาษ A4 จาก แนวตั้ง (Portrait) เป็นแนวนอน (Landscape) ปรากฎว่า เส้นที่ลาก
   ไม่สามารถลากถึงสุดขอบกระดาษด้านขวาได้ครับพี่น้องงง  งงกันไปอีกสองสามวัน แม้จะมาปรึกษา
   ผู้รู้ที่ Office แล้ว ต่างตกตะลึงกับ Feature นี้ - - ฮ่า ๆ แล้วมันลากได้แค่ตำแหน่งของแนวตั้งอ่ะนะ
   เฮ้อ ทำไปได้เนอะ

3. Refresh parameter field แล้วจะ Save ไม่ได้นะ

เจอสองอันนี้เข้าไปก็ไม่ต้องทำไรกินแล้วครับ BUG แบบนี้  ดังนั้นจึงเริ่มคิดได้ว่า เอ๊ะ มันจะมี Service pack หรือ Patch update
เหมือน windows รึป่าวหว่า ไหนลอง Search ดูดิ๊  ก็ได้พบกับ Service pack ที่ออกมา Update ครับ
(ก่อนหน้านี้ Crystal ไม่เคยมี Service pack ไรแบบนี้) นอกจากนั้นก็ได้ลองหาข้อมูลผู้ที่เจอปัญหาคล้าย  ๆกัน
ก็พบว่ามันเป็น BUG ของ Software จริง ๆ อย่างที่เกริ่นตอนต้นครับ ว่าใครจะไปคิดว่า Software ระดับนี้จะมี BUG กากๆ แบบนี้ได้

เหมือนจะบ่นมากไป แต่ใครลองได้เจอแบบนี้คงปวดหัวอะนะ

อันนี้เป็น Link สำหรับ Download crystal report 2008 Patch update นะครับ
บอกได้คำเดียวว่าต้องลง ไม่ลงคุณใช้งานไม่ได้แน่  ๆ เหอ ๆ

Crystal report 2008 : Service pack download link
http://www.sdn.sap.com/irj/boc/crystalreports-dotnet?rid=/webcontent/uuid/90d7dc4e-36ce-2b10-d2b3-d5d72d067e21

Microsoft SQL Server 2008 "BCP" is not support UTF-8 encoding ????

ลองดูที่นี่ครับ คนด่ากันระงม ฮ่า ๆ 
เป็นไปได้ไงที่ใน Version ก่อน คือ 2005 Support แล้วตอนนี้ 2008 ไม่ Support
Codepage ของ UTF-8 คือ 65001 นะ

SQL Server 2008 : BCP document
https://connect.microsoft.com/SQLServer/feedback/details/370419/bulk-insert-and-bcp-does-not-recognize-codepage-65001

SQL Server 2005 : BCP document
http://msdn.microsoft.com/en-us/library/ms162802(SQL.90).aspx

How to copy data between difference collations
http://msdn.microsoft.com/en-us/library/ms190657.aspx

วันอังคารที่ 9 มีนาคม พ.ศ. 2553

Export text file from sql server using BCP and SQL Script

- How to use bcp in sql server ?
- Export text file,csv file from sql server via sql script 
- Export ข้อมูลจาก SQL Server เป็น Text file,csv file ด้วย SQL Script

การ Export ไฟล์จากฐานข้อมูล Sql server เป็น Text file / CSV file
BCP เป็น Utility ตัวหนึ่งของ SQL Server ที่ใช้สำหรับ Bulk insert/ Export ไฟล์ในรูปแบบต่าง ๆ

How to use BCP in SQL Server, (วิธีการใช้งาน BCP ใน SQL Server )
1 Enabling  sys.xp_cmdshell   (เปิดใช้งาน xp_cmdshell)

sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure xp_cmdshell,1
GO
RECONFIGURE

If xp_cmdshell is disable this error will occure "SQL Server blocked access to procedure 'sys.xp_cmdshell"

2 Check  xp_cmdshell value
Exec sp_configure
GO
go to last line and check config_value of xp_cmdshell , value need to be "1"

(ไปที่บรรทัดสุดท้ายเพื่อตรวจสอบค่า หากเป็น "0" ต้อง set เป็น "1" ในขั้นตอนที่ 2)

 3 Create test sript to export data to text file (ตัวอย่าง BCP Script สำหรับ Export text file)
This example will show How to export data from table delimited by comman (",")
ในตัวอย่างจะแสดงวิธีการ Export ข้อมูลออกเป็น text file โดยคั่น Columns ด้วย  comma
USE AdventureWorks

Declare @Headers varchar(1000),@sql varchar(8000), @data_file varchar(100),
@x varchar(300),@file_name varchar(100)
BEGIN
SET @file_name = 'C:\test_bcp.txt'
---------------- HEADER ROWS GENERATE ----------------
Select @Headers = IsNull(@Headers + ',', '') + Column_Name
From INFORMATION_SCHEMA.COLUMNS
Where Table_Name = 'CreditCard' ORDER BY ORDINAL_POSITION ASC

print @Headers

set @sql = 'bcp "select ''' + @Headers + '''" queryout "'+@file_name+'" -U "sa" -P "1234" -c -C 65001 -t "," -r \n'


print @sql
exec master..xp_cmdshell @sql
set @sql = 'exec master..xp_cmdshell ' + @sql
print @sql

-----------------DATA SECTION ------------------------
select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.csv'
print @data_file


set @sql = 'bcp "select * from [AdventureWorks].sales.CreditCard '+' " queryout "'+@data_file+'" -U "sa" -P "1234" -c -C 65001 -t "," -r \n'


print @sql
exec master..xp_cmdshell @sql
--Copy dummy file to passed CSV file


set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> "'+@file_name+'"'''
print @sql
exec(@sql)
--Delete dummy file
set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''
print @sql
exec(@sql)
---------------- END DATA SECTION -------------------
END


- Dont forget to change sa password in script.
- Exported file will store in server side! Not client.

วันจันทร์ที่ 8 มีนาคม พ.ศ. 2553

Tracking dimensions member in specify time periods with filter function (MDX QUERY)

Tracking dimensions member in specify time periods with filter function(MDX Query)
- MDX ,Population sampling data
-

ตัวอย่างของการ Tracking ข้อมูลจาก Dimension Members
ในกรณีนี้คือการหาว่าสินค้าที่เคยขายได้ในเดือน January 2003
ยังคงขายได้ในเดือนถัดไป มีตัวเลขเป็นเท่าไร


Example data : AdventureWork
----------------------------------------------------------------------
WITH
SET [SellingProducts] as
Filter (
[Product].[Product].[Product].MEMBERS
,([Date].[Calendar].[Month].&[2003]&[1] /* January 2003*/
, [Measures].[Sales Amount]) >=1500
)


SELECT
{ [Measures].[Sales Amount]} ON Columns
,
NON EMPTY
[Product].[Category].[Category] *
[SellingProducts] *
{
[Date].[Calendar].[Month].&[2003]&[1], /* January 2003*/
[Date].[Calendar].[Month].&[2003]&[2], /* February 2003*/
[Date].[Calendar].[Month].&[2003]&[3] /* March 2003*/
} ON Rows
FROM [Adventure Works]

-------------------------------------------

MDX Description (คำอธิบาย MDX Query)
1. Create set of members for exampling. In this case I want to track which products has sold in January 2003
    and sales amount  is >= 80,000 US.
    -สร้าง Member set ที่ต้องการ Track ขึ้นมา โดยส่วนนี้ใช้ Filter ในการกรองข้อมูลที่ต้องการคื
     หาสินค้าที่ขายได้ตั้งแต่ 80,000 US ขึ้นไปในเดือน January 2003
2. Use defined member set in select section.

---------------- Result -------------------

Bikes Mountain-200 Silver, 38 January 2003 $106,885.25
Bikes Mountain-200 Silver, 38 February 2003 $127,185.17
Bikes Mountain-200 Silver, 38 March 2003 $116,828.07
Bikes Mountain-200 Silver, 42 January 2003 $85,451.03
Bikes Mountain-200 Silver, 42 February 2003 $125,528.03
Bikes Mountain-200 Silver, 42 March 2003 $91,556.75
Bikes Mountain-200 Silver, 46 January 2003 $83,271.07
Bikes Mountain-200 Silver, 46 February 2003 $131,328.01
Bikes Mountain-200 Silver, 46 March 2003 $120,970.91
Bikes Mountain-200 Black, 38 January 2003 $98,356.71
Bikes Mountain-200 Black, 38 February 2003 $180,320.64
Bikes Mountain-200 Black, 38 March 2003 $128,273.55
Bikes Mountain-200 Black, 42 January 2003 $106,962.92
Bikes Mountain-200 Black, 42 February 2003 $158,707.57
Bikes Mountain-200 Black, 42 March 2003 $100,815.63
Bikes Mountain-200 Black, 46 January 2003 $94,668.34
Bikes Mountain-200 Black, 46 February 2003 $135,650.30
Bikes Mountain-200 Black, 46 March 2003 $101,225.45
Bikes Road-250 Red, 44 January 2003 $84,539.91
Bikes Road-250 Red, 44 February 2003 $135,850.26
Bikes Road-250 Red, 44 March 2003 $111,416.76
Bikes Road-250 Red, 48 January 2003 $85,028.58
Bikes Road-250 Red, 48 February 2003 $152,465.04
Bikes Road-250 Red, 48 March 2003 $64,015.77
------------------------------------------------------------

วันพุธที่ 10 กุมภาพันธ์ พ.ศ. 2553

Impact of HierarchyUniqueNameStyle in Reporting Service parameters design

Determines how unique names are generated for hierarchies that are contained within the CubeDimension.

บทความนี้จะกล่าวถึงการ Design CUBE ในส่วนที่เกี่ยวกับ Dimension ซึ่งกระทบต่อการ Desing report
ในการ Desing Cube นั้นจะต้องมี Dimension เข้ามาเกี่ยวข้องด้วย ซึ่งจะมี Property ให้ Set มากมาย
แต่ปัญหาที่เคยพบเกี่ยวกับ Property ตัวหนึ่งคือ "HierarchyUniqueNameStyle"
Property ตัวนี้ประกอบด้วย
  • IncludeDimensionName (รวมชื่อ Dimension ใน Hierarchies)
  • ExcludeDimensionName (ไม่รวมชื่อ Dimension ใน Hierarchies)
ปกติแล้ว Default value คือ IncludeDimensionName อยู่แล้ว ซึ่งควรจะเป็นเช่นนั้น
ไม่แนะนำให้ Set เป็น ExcludeDimensionName เพราะจะมีปัญหาตามมาหากต้องการใช้
Front end tool ในการ Browse data
ตัวอย่างปัญหาที่เคยพบเกี่ยวกับ Property ตัวนี้ซึ่งกระทบกับ Report ที่เคย Design ไว้
- Cube ถูก Design ไว้ให้มีบาง Dimension property "HierarchyUniqueNameStyle" มีค่าเป็น ExcludeDimensionName
- การ Design Report มีการสร้าง Parameters ให้ User เลือก โดยมีการอ้างถึง Dimension เช่น Dimension Products (Dimension Products นั้นถูก Set ให้เป็น ExcludeDimensionName )
- มีความต้องการใช้ Front end tool (Analyzer 2007 : Strategy Companion) เชื่อมต่อกับ CUBE แต่เกิดปัญหาว่าไม่สามารถ Browse dimensions ที่มีการ Set property "HierarchyUniqueNameStyle" เป็นแบบ ExcludeDimensionName ได้
- เมื่อแก้ไข Cube property "HierarchyUniqueNameStyle" ให้เป็น IncludeDimensionName ปรากฎว่า Report ที่เคย Design ไว้นั้นทำงานผิดพลาดทั้งหมด กล่าวคือ Parameter ที่เคยอ้างถึง Dimension ที่เคยเป็น ExcludeDimensionName จะไม่แสดงข้อมูล
นอกจากนั้นความแตกต่างของ Property นี้จะเห็นได้จากตอนที่เขียน MDX Query
หาก Drag & Drop dimension attribue ลงใน Query plane text ตามตัวอย่าง

1 Cube Dimension property --> IncludeDimensionName
[Dim_Product].[Category].[Category]
2 Cube Dimension property --> ExcludeDimensionName
[Category].[Category]
How to set "HierarchyUniqueNameStyle" in cube designer
-Open cube structure
-Select dimension to set property
-Property appear in property pallet.

figure1 : HierarchyUniqueNameStyle in Cube Designer

MDX Query : Improve performance via "NonEmptyCrossjoin"

Returns a set that contains the cross product of one or more sets, excluding empty tuples and tuples without associated fact table data.

ค่าที่ได้จากการใช้ function นี้จะเป็นค่าที่ไม่รวมค่าว่างจากการ Cross join dimension
ซึ่งจะทำให้ QueryPerformance ดีขึ้นอย่างเห็นได้ชัด
ตัวอย่างจาก Adventure Works (OLAP)

Example 1 เป็นการทำ Dimension Cross ปกติ (Dimensions Crossjoin )

SELECT [Measures].[Order Count] ON COLUMNS,
CROSSJOIN([Sales Territory].[Sales Territory Country].[Sales Territory Country].ALLMEMBERS ,[Product].[Category].[Category].ALLMEMBERS)
ON ROWS
FROM [Adventure Works]



Figure 1 : Result for crossjoin


Example 2 เป็นการทำ NonEmptyCrossjoin Dimension

SELECT [Measures].[Order Count] ON COLUMNS,
NONEMPTYCROSSJOIN([Sales Territory].[Sales Territory Country].[Sales Territory Country].ALLMEMBERS ,[Product].[Category].[Category].ALLMEMBERS)
ON ROWS
FROM [Adventure Works]



Figure 2 : Result for NonEmptyCrossjoin

จากตัวอย่าง คือการ Query ข้อมูลการ Order สินค้า ตามประเทศ และตามประเภทสินค้า
จะเห็นได้ว่าใน Query แรกจะมีค่า Null ออกมาด้วย (ในกรอบสีแดง)
ซึ่งหมายความว่าใน Australia ไม่มีการสั่งสินค้าประเภท Motocycle นั่นเอง
เปรียบเทียบกับตัวอย่างที่สองที่จะไม่มีค่า Null ออกมา

วันอังคารที่ 26 มกราคม พ.ศ. 2553

How to identify your SQL Server version and edition

วิธี ตรวจสอบ SQL Server Version
How to identify your SQL Server version and edition
------------------------------------------------------
ใช้ Query นี้ในการตรวจสอบได้เลยครับ

SELECT SERVERPROPERTY('productversion') as Version, SERVERPROPERTY ('productlevel') as ServicePack, SERVERPROPERTY ('edition') as ServerEdition


ตัวอย่าง
2005.90.1399 SQL Server 2005 RTM
2005.90.2047 SQL Server 2005 Service Pack 1
2005.90.3042 SQL Server 2005 Service Pack 2
2005.90.4035 SQL Server 2005 Service Pack 3

2008R2 10.50.4000.0 Service Pack2
2008    10.0.1600.22    RTM    Enterprise Edition (64-bit)
2008    10.0.2531.0      Service Pack1


The standard product version format for SQL Server is MM.nn.bbbb.rr where each segment is defined as:
MM - Major version
nn - Minor version
bbbb - Build number
rr - Build revision number



SQL Server Analysis Service SP3 Fixed

FIX: A SSAS 2005 or SSAS 2008 server crashes when you run a Multidimensional Expressions query that uses the CDBL function in a calculated member

Event Type: Error
Event Source: .NET Runtime 2.0
Error ReportingEvent
Category: None
Event ID: 1000
Date: 1/12/2010
Time: 4:20:17 P
MUser: N/A
Computer: OLAPSERVER

Description:Faulting application msmdsrv.exe, version 9.0.4035.0, stamp 492b1bb9, faulting module kernel32.dll, version 5.2.3790.4480, stamp 49c51cdd, debug? 0, fault address 0x0000000000027ded.

จากปัญหาที่พบจากการ Install Service pack3 ใน MSSQL 2005 นั้น
ทำให้ MDX Query ที่เคยเขียนไว้ในรายงานทำให้ระบบ Crash กล่าวคือ
เมื่อทำการ Run Query ดังกล่าวจะทำให้ SSAS Service down เลยทีเดียว
ได้ค้นหาสาเหตุอยู่ครึงวันจึงได้ไปเจอว่า มันคือ BUG ของ Service Pack3 นั่นเอง - -"
(เนื่องจาก MDX Query ที่ได้เคยเขียนไว้ ณ ขณะนั้นใช้ Service Pack2)

วิธีการแก้ไขให้ไป Download ตัว Fix จากเว็บ Microsoft แล้วทำการ Install ครับ
Document : http://support.microsoft.com/default.aspx/kb/977309
Download : http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=976951&kbln=en-us
เลือก File ให้ตรงกับ OS / Version ด้วยนะครับ

วันอังคารที่ 12 มกราคม พ.ศ. 2553

The request failed or the service did not respond in a timely fashion

The request failed or the service did not respond in a timely fashion

In this case , SQL Server Analysis services is stoped by MDX Query.
Whitin SQL Server Service Pack3 bug.
That issue when runing Multidimensional Expressions query(MDX) that uses the CDBL function in a calculated member.

In this scenario, the Analysis Services server may crash. Additionally, the following events are logged in the Application log:


Case 1
Event Type: Error
Event Source: MSSQLServerOLAPService
Event Category: (256)
Event ID: 22

Description:The description for Event ID ( 22 ) in Source ( MSSQLServerOLAPService ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. You may be able to use the /AUXSOURCE= flag to retrieve this description; see Help and Support for details. The following information is part of the event: Internal error: An unexpected exception occured..


Case2
Event Type: Error
Event Source: .NET Runtime 2.0 Error Reporting
Event Category: None
Event ID: 1000

Description:Faulting application msmdsrv.exe, version 9.0.4035.0, stamp 492b1bb9, faulting module kernel32.dll, version 5.2.3790.4480, stamp 49c51cdd, debug? 0, fault address 0x0000000000027ded.


In my case, Analysis Service is stoped and can not restart .
The error mesage always popup "The request failed or the service did not respond in a timely fashion " that make me confuse.
To restart server , that's not a good solutions.
To solve facing problem just do only End process dw20.exe
and then Analysis service can start correctly.
Good luck.

วันพุธที่ 6 มกราคม พ.ศ. 2553

MDXParameter , Capture Parameters value from MDX Query

จากการใช้งาน SQL Server Profiler ในการ Trace Query ต่าง ๆ นั้น
ให้ผลที่น่าพอใจพอสมควร แต่ในกรณีที่มีการรัน MDX Query ผ่าน Reporting Service
แล้วมีการ Input paramters ลงไป จะ Track Paramerters values ไม่ได้

เมื่อได้ลอง Search ดูก็ได้พบ Free Tool ตัวนึงมีชื่อว่า MDXParameter จากเว็บ Codeplex
ซึ่งมีความสามารถในการ Trace & Replace parameters values ทำให้เราสามารถนำ Query
มาทำการวิเคราะห์ต่อไปได้ ซึ่งถือว่ามีประโยชน์ดีทีเดียว อีกทั้งยังมีการ Export ข้อมูลที่ Trace
มาได้ลงใน MSSQL Server ได้ด้วย แต่ก็ยังมีข้อเสียคือไม่มี Column ที่เก็บ MDX Query ที่
ได้ Replace parameter แล้วลงไปด้วย ทำให้การนำไปใช้งานในต่อค่อนข้างจะยาก เพราะ
อย่างกรณีที่ทำการ Research เรื่องนี้คือต้องการที่จะนำ MDX Query ที่ User ได้รันไปทำ
CUBE Warm UP เพื่อประสิทธิภาพในการใช้งานครั้งต่อไป

ขั้นตอนการใช้งานหลังจาก Download มาแล้ว
* แนะนำให้รันที่ SSAS Server เพราะจาการทดสอบรันจาก Client แล้ว Point IP Addr ไปที่
Server แล้วตอน View Query เกิด Error ขึ้น
1 Run -- > MDXParameter.exe แล้ว Config ค่าต่าง ๆ ดังนี้
- SSAS Server for tracing = localhost (คือ SSAS Server ที่ต้องการ Trace Query)
- SQL Server = localhost (คือ DB Server ที่ต้องการ Point ไปเพื่อสร้าง Table)
- Database Name to save trace = QueryLog (คือ Database Name )
- Table Name to save trace = MDXTraceQuery (คือ Table Name ที่ต้องการ save trace data)
2 Click strat trace button รันไปจนกว่าจะพอใจ แล้วกด Stop ในระหว่างนี้ Program จะไม่ Show data
ใด ๆ ทั้งสิ้นจนกว่าจะกด Stop trace
3 เลือก Query ที่ต้องการดู (ให้เลือก Replace Parameter ด้วย)


Reference Site http://mdxparameter.codeplex.com/