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

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/