Mssql, Microsoft sql server, SSAS, SSRS ,SSIS , Analysis Service, Reporting Service, Integration Service, XMLA ,MDX ,SQL
วันอังคารที่ 30 พฤศจิกายน พ.ศ. 2553
SQL Server , Generate scripts for INDEXS, Primary key
Good tool for this case
วันจันทร์ที่ 29 พฤศจิกายน พ.ศ. 2553
Window 64 bit & Microsoft Visual studio , Connect to Oracle problem
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
and just run this script
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"
วันพุธที่ 17 พฤศจิกายน พ.ศ. 2553
MDX export Result in Excel 2007
วิธีการรัน 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
From sys.indexes
วันจันทร์ที่ 12 กรกฎาคม พ.ศ. 2553
Reporting Service , Subscription with Windows integrated security
ด้วยการ Connect data source ที่มี Secure เป็นแบบ Windows integrated security ก็ได้พบซะทีว่า
"มันทำไม่ได้" - -" แอบเซ็งครับ
REF : http://database.itags.org/sql-server/377790/
Reporting Service connecting to Analysis Service using Data source
การที่จะ 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
บทความนี้ขอกล่าวถึง 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
Use myDB
GO
How to view database information in SQL Server
วันพุธที่ 9 มิถุนายน พ.ศ. 2553
SQL Server 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
มีความรู้เล็ก ๆ น้อย ๆ มาฝากเกี่ยวกับภาษาของเครื่อง ในตอนที่เราทำ 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
จากปัญหาที่พบในเครื่องของ User คือ รูปแบบของวันที่แตกต่างจากที่กำหนดไว้ใน Report
เช่นใน Report กำหนดเป็น mm/dd/yyyy แต่เครื่อง User เป็นแบบ dd/mm/yyyy ทำให้รายงานเกิด Error
ปัญหานี้เกิดขึ้นเนื่องมาจากการ Setting ค่าใน Internet Options ครับให้ดูตามรูปตัวอย่าง
เลือก วันที่จาก Calendar
ค่าที่ได้จากการเลือกวันที่
จะได้รูปแบบวันที่ที่เปลี่ยนไปตามนี้ จะเห็นว่าจาก 4/28/2010 จะกลายเป็น 28/4/2010
วันจันทร์ที่ 26 เมษายน พ.ศ. 2553
MDX Query : Getdate()
ปกติหากจะหาวันที่ปัจจุบันใน 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"
-------------------------------------------------------------
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
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 ในการ 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
การพิมพ์ 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
You need to download update for windows Download Here
วันพฤหัสบดีที่ 18 มีนาคม พ.ศ. 2553
การใช้ SUB Query ใน SQL Command
ซึ่งต้องใช้ ( ) ในการ 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
ตัวอย่าง
SELECT *
FROM employee
WHERE emp_id IN ('100234','100235','100236')
ความหมายของ Query นี้คือ การเลือกพนักงานที่มีรหัสตามที่ระบุนั่นเอง ซึ่งผลลัพธ์จะได้ 3 Records
คำสั่ง JOIN ใน SQL
มีหลายรูปแบบซึ่งใช้งานแตกต่างกันออกไป
รูปแบบของการ 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
ตัวอย่าง
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
-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 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
ในกรณีที่เคยเจอว่าไม่สามารถ 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
ให้ Remove ของเดิมออกก่อน โดยใช้โปรแกรม Windows Install cleanup
รายละเอียดของวิธีการ
http://support.microsoft.com/kb/968749
วันพุธที่ 10 มีนาคม พ.ศ. 2553
Crystal report 2008 BUG , Service pack , Patch update
(คริสตัลรีพอร์ท ไม่ 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
- 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)
- 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
บทความนี้จะกล่าวถึงการ Design CUBE ในส่วนที่เกี่ยวกับ Dimension ซึ่งกระทบต่อการ Desing report
ในการ Desing Cube นั้นจะต้องมี Dimension เข้ามาเกี่ยวข้องด้วย ซึ่งจะมี Property ให้ Set มากมาย
แต่ปัญหาที่เคยพบเกี่ยวกับ Property ตัวหนึ่งคือ "HierarchyUniqueNameStyle"
Property ตัวนี้ประกอบด้วย
- IncludeDimensionName (รวมชื่อ Dimension ใน Hierarchies)
- ExcludeDimensionName (ไม่รวมชื่อ Dimension ใน Hierarchies)
ไม่แนะนำให้ 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"
ค่าที่ได้จากการใช้ 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
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)
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
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
ให้ผลที่น่าพอใจพอสมควร แต่ในกรณีที่มีการรัน 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/