Format string percent


when use template ‘Percent of Total’ or ‘Percent of Parent’ you found error Message

“Error 21 MdxScript(Debit Spending) (30, 17) Parser: The syntax for ‘Percent’ is incorrect.”

because SSAS default format string 

Image

 

fix this issue change format string percent to “percent”

Image

Advertisements

Expression Cast Type (SSIS)


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

confirm value to code behide


ถ้าเราต้องการรู้ว่า confirm message ของนั้นกดอะไรเพื่อเอาไปเลือก case ใน code behind ว่าจะทำอะไรหรือไม่ทำอะไร เขียนได้ตามตัวอย่างดังนี้

javascript

function AlertAndPostBack() {
           
var confirmResult = confirm("are your sure");
           
if (typeof (__doPostBack) == "function") {
               
var doPostBack = __doPostBack;
                doPostBack
('confirm', confirmResult);
           
}
           
return false;
       
}

asp




       
ID="Button1" runat="server" Text="Button" OnClientClick="return AlertAndPostBack();" UseSubmitBehavior="false" />
   

codebehind

protected void Page_Load(object sender, EventArgs e)
       
{
           
if (IsPostBack)
           
{
               
if (Request.Form["__EVENTTARGET"] == "confirm")
               
{
                   
bool result = Convert.ToBoolean(Request.Form["__EVENTARGUMENT"]);
                   
if (result)
                   
{
                       
Response.Write("YES");
                   
}
                   
else
                   
{
                       
Response.Write("NO");
                   
}
               
}
           
}
       
}


Panya's Blog: Programmer Thoughts

Pivot Table หมายถึงลักษณะของตารางที่แสดงข้อมูลในเชิงวิเคราะห์ (Analytic) ไม่ใช่ข้อมูลดิบแบบ Transaction
จุดเด่นที่สังเกตได้ก็คือคอลัมน์ของ Pivot Table จะไม่ตายตัว แต่จะได้มาจากตัวเนื้อข้อมูล ต่างกับ Table ธรรมดา
ที่มักจะ fix คอลัมน์ไว้แล้วว่าประกอบด้วยข้อมูลอะไรบ้าง และตัวเลขใน Pivot Table ก็มักจะเป็นค่าที่สามารถวัดผล (Measure) ได้
โดยมากมักจะเป็นค่าที่เกิดจาก Aggregate function อย่างเช่น Sum, Avg, Max, Min เป็นต้น

View original post 452 more words

Reporting service auto generate and sending to e-mail


หลักๆ คืออย่าลืม config e-mail address ใน reporting service configuration ไม่อย่างงั้น เวลาตั้ง schedule แล้วจะไม่มี method sending e-mail มาให้เลือกใช้ โดยเราสามารถ เลือก method ได้หลายแบบรวมถึงการ gen ไว้ที่ folder ที่เรากำหนด แถมยังเก็บเป็น history ไว้ใน reporting service ได้อีกด้วย

create a file share subscription
1. In Report Manager, on the Contents page, navigate to the report you want to subscribe to. Click the report to open it.

2. Click the Subscriptions tab, and then click New Subscription.

3. For the method of delivery, select Report Server File Share from the Delivered by list box.

4. Type a file name for this subscription in the File name text box.

5. Ensure that Add a file extension when the file is created is selected. This causes the report to be saved with a three-character file extension. The file extension is determined by the rendering format you select.

6. In the Path text box, type a Universal Naming Convention (UNC) path to an existing folder where you want to deliver the reports (for example, \\\). Include double backslash characters at the beginning of the path. Do not specify a trailing backslash.

7. Select a render format for file delivery. Choose a format that corresponds to the desktop application that will be used to open the report. Avoid formats that do not render a report in a single stream or that introduce interactivity that cannot be supported in a static file (that is, HTML 3.2, HTML 4.0, or HTML with Office Web Components).

8. In the User name and Password text boxes, specify the credentials required to access the file share, using the format \ for the user name.

9. Specify overwrite options. If you click Do not overwrite the file if a previous version exists, the delivery will not occur if an existing file is detected. If you click AutoIncrement, the report server appends a number to the file name to distinguish it from existing files of the same name.

10. Specify subscription delivery options as follows:

To specify a delivery schedule, click When the scheduled report run is complete and click the Select Schedule button. A schedule page opens.
To deliver the report when a report snapshot is updated with a newer version, click When the report content is refreshed. The schedule used to update a report snapshot determines when your subscription is processed.
Note:
This option is available only for snapshots that are already associated with an update schedule.

11. For parameterized reports, specify parameters to use for the report for this subscription. The parameters can be different from those used to run the report on demand or in other scheduled operations.

การทำ Performance Tuning SQL Query เบื้องต้น (part 6 – Database Design)


ตอนนี้ผมจะได้กล่าวถึงสิ่งที่ควรปฏิบัติในการออกแบบ Database ซึ่งส่วนใหญ่จะหนักไปทาง data storage โดยพอจะสรุปเป็นข้อๆ ได้ดังนี้ครับ

1) ใช้ Normalization เพื่อ Optimize Transactional Process
การทำ Normalization นั้น จะช่วยในมุมการใช้คำสั่ง Insert, Update, Delete ครับ ทำให้เกิด Performance ที่ดีครับ แต่จะมีผลตรงกันข้ามกับคำสั่ง Select เพราะว่าใน Database หลายๆ ตัวที่ผมเคยเจออาจจะพบว่า Query เร็ว แต่ Insert ช้าก็ได้ครับ

2) แยกไฟล์ MDF และ LDF ไว้กันคนละ physical disk
โดยคำสั่ง Insert, Update, Delete จะกระทำกับไฟล์ LDF เป็นหลัก ทั้งนี้ในงาน multi-user ขนาดใหญ่แล้วจะเกิด load read-write อยู่บน physical disk ก้อนเดียวกัน ถ้าเป็นไปได้ก็ควรจะแยกไฟล์ MDF และ LDF ไว้คนละ physical disk ก็จะทำให้เกิดการแบ่ง load read-write ไปไว้คนละ physical disk (ผมเคยทำมาหลายงานแล้ว เร็วขึ้นมา 10 เท่าก็เคยเจอครับ)

3) แยก tempdb ไว้บน harddisk ก้อนใหม่
หลักการจะเหมือนกับการแยกไฟล์ MDF และ LDF ครับ คือการแยก load แต่ tempdb จะเป็น temp สำหรับ database ทุกก้อนที่อยู่ใน Server ครับ ลองคิดดูเล่นๆ สิครับว่า tempdb จะรับงานหนักแค่ไหน ถ้าเป็นไปได้ก็ควรแยก tempdb ไว้คนบน physical disk ต่างหากได้จะดีมากครับ

http://yongyutde.spaces.live.com/blog/cns!A1F444837F369955!672.entry

4) สำหรับ table ขนาดใหญ่ให้ใช้ Table partition
การทำ table partition เป็นการแยก load ทาง horizontal โดยจะทำได้ตั้งแต่ sql server 2005 ขึ้นไป เป็นวิธีการกระจาย load ที่ฉลาดมากที่สุดวิธีหนึ่ง โดยสามารถกำหนดเงื่อนไขในการแบ่ง table เช่น แบ่งตามปีที่ซื้อสินค้า, แบ่งตามแผนก เป็นต้น ส่วนวิธีการสร้าง table partition จะไว้เขียนในตอนต่อๆ ไปครับ

5) สำหรับ database ขนาดใหญ่ให้ใช้วิธีการแยกไฟล์ออกเป็นหลายๆ ไฟล์โดยใช้ File Group
หลักการจะเหมือนกับการทำ partition table แต่เป็นระดับ Database แทน โดยการแยก table กระจายไปแต่ละ physical disk แต่วิธีการแยกเราจะใช้ file group ซึ่งสามารถทำได้ทุกเวอร์ชั่นของ SQL Server

6) เมื่อใช้ Data type แบบ TEXT, NTEXT, IMAGE ให้แยกเก็บต่างหากจาก Table Storage
โดยปกติแล้วการเก็บข้อมูลของ column ที่มี data type เป็น text, ntext, image นั้นจะเก็บอยู่ใน page เดียวกับ column อื่นๆ เพราะฉะนั้น เวลาใช้คำสั่ง select ก็จะทำให้ sql server ไปอ่าน column เหล่านี้ขึ้นมาด้วย ซึ่งถือว่าเป็น column ที่พิเศษ ดังนันจึงควรจะทำการแยก column ที่เป็น text, ntext, image แยกออกมาต่างหาก เพื่อเพิ่ม performance โดยใช้คำสั่ง

EXEC sp_tableoption ‘orders’, ‘text in row’, ‘ON’

7) พยายามใช้ constraint ที่เป้น built-in เช่น primary key, foreign key, check, default, unique แทนการเขียน trigger ขึ้นมาเอง
contraint ต่างๆ ที่มีอยู่แล้ว ทาง microsoft ได้ทำการทดสอบเรื่อง performance มาเป็นอย่างดีอยู่แล้ว พยายามใช้ built-in เป็นหลักเพื่อให้ได้ performance ที่ดี แต่ถ้า built-in ที่มีอยู่ ไม่สามารถตอบสนองสิ่งที่เราต้องการได้จริงๆ ถืงจะเริ่มนึกถึงการเขียน trigger ขึ้นมาใช้งานเองอีกทีนึงครับ

8) แยก Index ไว้คนละ Physical Disk โดยใช้ File Group
การสร้าง index จะทำให้การ access data ทำได้เร็ว แต่ก็ควรที่จะแยก index ไว้คนละ physical disk โดยใช้ file group เหมือนกันครับ รับรองว่าไม่ผิดหวัง

9) ใช้ Disk RAID เพื่อเพิ่ม Performance
สุดท้ายจริงๆ ถ้ามีงบประมาณมากหน่อย ก็อาจจะนึกถึงการซื้อ Hardware RAID Disk ซึ่งจะได้ performance ที่ดีแน่นอน

การทำ Performance Tuning SQL Query เบื้องต้น (part 4 – การใช้ Performance Monitor)


จากตอนที่แล้วที่สรุปขั้นตอนในการ Tuning ไป คราวนี้ก็เริ่มต้นที่การ Monitor กันก่อนนะครับ

Performance Monitor
Performance Monitor เป็นเครื่องมือที่มีประสิทธิภาพสูง แต่ฟรี ที่มีอยู่ใน windows อยู่แล้ว โดยส่วนใหญ่แล้วเรามักจะใช้ในการตรวจสอบ CPU, Disk, Memory, Network และอื่นๆ สำหรับโปรแกรมเมอร์บางท่านอาจจะยังไม่เคยใช้ เพราะว่าเครื่องมือตัวนี้ Admin หรือ DBA มักจะเข้ามาใช้เพื่อ Monitor ระบบอยู่แล้วครับ

ในตอนนี้ผมจะลองแสดงให้เห็นวิธีการใช้งานเพื่อหา Bottle Neck อย่างง่ายๆ ดูนะครับ

เริ่มจากเปิดโปรแกรม Performance Monitor ขึ้นก่อน โดยโปรแกรมนี้จะอยู่ใน Administrative Tools ซึ่งปกติจะมีอยู่ใน Windows ทุกเวอร์ชั่นครับ

จะพบหน้าจอโปรแกรมดังรูปถัดไป

เราจะเห็น counter ที่ได้เพิ่มเข้ามาแล้วได้แก่

1) % Processor Time – เป็น counter ที่ใช้วัดการทำงานของ CPU ว่ามีการทำงานเป็นอย่างไร โดยปกติแล้วเราจะดูที่ค่า Average ถ้าค่า average ไม่เกิน 80% ก็ถือว่ารอดครับ แต่ถ้าเกินกว่านี้ แสดงว่า CPU ทำงานไม่ทันน่ะครับ อาจจะแก้ปัญหาโดยการเพิ่ม CPU ให้มากขึ้นหรือว่าเปลี่ยน CPU น่ะครับ

2) Avg. Disk Queue Length – ถ้า counter ตัวนี้ขึ้นสูง แสดงว่า disk ทำงานไม่ทัน อาจจะแก้ปัญหาโดยการเพิ่ม disk RAID หรือไม่ก็หาวิธีการเพิ่มประสิทธิภาพของ Database ให้ติดต่อ Disk น้อยลง โดยอาจจะใช้ Index, กระจาย database file ไปหลายๆ disk, การใช้ Cache เป็นต้น

3) Page/Sec – ปกติ counter ตัวนี้จะไม่เกิดขึ้นสูงในกรณ๊ที่ Physical Memory ที่มีอยู่เพียงพอ แต่ถ้า counter ตัวนี้เกิดขึ้นสูงแสดงว่า Memory ไม่พอ อาจจะต้องเพิ่ม Physical Memory ขึ้นอีก

แต่การดูในแต่ละ counter จะต้องดูตอนที่เกิด load จริงๆ ถ้าเป็นไปได้ และอาจจะต้องดูหลายๆ counter ประกอบด้วยครับ เหมือนกับดูอาการทางของผู้ป่วยเมื่อไปพบแพทย์ แต่ทางในปฏิบัติแล้ว เราอาจจะวิธีเขียน script เพื่อทดสอบก็ได้ครับ เพื่อให้ได้ load คงที่ทุกครั้งที่ทดสอบ ไม่เช่นนั้นแล้ว การทดสอบก็จะไม่สามารถวัดอะไรได้แน่นอนครับ

นอกจาก counter ที่มีอยู่ใน default แล้ว เราสามารถที่จะเพิ่มเติม counter ได้อีกโดย click ขวาเพื่อเลือกเมนู Add Counter ดังรูปครับ

จะเกิดหน้าจอให้เลือก ดังรูปถัดไปครับ

สามารถอธิบายหน้าจอได้ดังนี้ครับ

Select counters from computer – ระบุชื่อ computer name ที่ต้องการจะตรวจสอบ
Performance Object – หมวดหมู่ของ counter
Select counter from list – รายชื่อ counter ในแต่ละหมวดหมู่ โดยจะ filter ตามกลุ่มของ Performance object ที่เลือก
Select instance from list – instance ของ counter ที่เลือก ยกตัวอย่างเช่น ถ้าเราเลือก %Processor Time ในช่อง select instance from list จะแสดงจำนวน CPU ทั้งหมดที่อยู่ในเครื่องครับ จากรูปด้านบน มี cpu 0 ตัวเดียว แสดงว่าในเครื่องนี้มี cpu ทั้งหมด 1 ตัวครับ แต่ถ้าเครื่องนี้มีหลายตัวก็อาจจะแสดงเป็น 0, 1, 2, 3 ก็แสดงว่าในเครื่องนี้มี cpu ทั้งหมด 4 ตัว โดยเราอาจจะขอดูเฉพาะตัวใดตัวหนึ่งหรือดูทั้งหมดก็ได้ครับ

ส่วนจะเพิ่มเติม counter อะไรที่จำเป็นในการ monitor ขอยกยอดไปเขียนอีกทีนะครับ

credit : http://yongyutde.spaces.live.com/blog/cns!A1F444837F369955!581.entry

การทำ Performance Tuning SQL Query เบื้องต้น (part 3 – ขั้นตอนในการ Tuning ต่อ)


เรามาทบทวนขั้นตอนในการ Tuning Query กันก่อนนะครับ จากประสบการณ์ของผม ควรจะมีขั้นตอนในการ Tune ดังนี้ครับ

Performance Baseline Measurement
Database Design
Optimizing Query Syntax
Index Strategy
Reduce Locking and Blocking
Database Server Configuration
Data Warehouse Strategy
Hardware Upgrade Strategy
คราวที่แล้วผมได้อธิบายไปจนถึงในขั้นตอนที่ 4 ขอต่อในขั้นตอนที่ 5 เลยนะครับ

5) Reduce Locking and Blocking
การใช้งาน Database ปกติแล้วเรามักจะใช้อยู่ใน Multi-User Environment เราก็ย่อมจะมีปัญหาเรื่องการแย่งกันใช้แน่นอนครับ

ผมจะยกตัวอย่างง่ายๆ สมมุติว่า ถ้าเรามี Server 2 ตัว ที่มี spec เหมือนกัน และมีขนาดฐานข้อมูลที่เท่ากัน แต่มีจำนวน user ไม่เท่ากัน ลองทายดูสิครับว่า Server ตัวไหนจะทำงานได้ช้ากว่า แน่นอนครับ Server ที่มีจำนวน User มากกว่านั่นเอง

เหตุผลที่ทำให้ช้ากว่าก็มีเหตุผลง่ายๆ น่ะครับ คือการแย่งกันใช้นั่นเอง (Data Contension) ก็เป็นเรื่องธรรมดาแหล่ะครับ ที่ data มีอยู่ชุดเดียวแต่คนที่จะใช้ data (User) กับมีหลายคน ก็ต้องมีการแย่งกันหรือต้องรอ (Queue)

แต่ไม่ว่าจะเลือกวิธีใดก็จะยึดหลักการคล้ายๆ กันก็คือ ลดจำนวน user ที่แย่งกันใช้ในเวลาเดียวกัน (Concurrent) หรือไม่ก็ทำอย่างไรให้ user คนที่เข้ามาใช้งานพร้อมๆ กันไม่ต้องรอ (reduce wait lock) เพราะโดยตามปกติแล้ว เมื่อมี User เข้ามาใช้ข้อมูลชุดเดียวกันพร้อมๆ กัน, User คนแรกจะทำการ lock ข้อมูล เพื่อป้องกันไม่ให้ user คนที่เข้ามาทีหลังมาแย่งใช้ข้อมูลชุดเดียวกันอยู่แล้ว ดังนั้น user ที่เข้ามาทีหลังจะต้องเกิดการรอ จนกว่า user คนแรกจะปิดการใช้งาน data ออกไปเอง แต่เราก็สามารถเลือกที่จะไม่รอก็ได้ครับ

ก็มีอยู่หลายวิธีนะครับ ที่จะแก้ปัญหา ยกตัวอย่างเช่นการทำ Server Farm, Replication, Data Mirror หรือแม้กระทั่งการทำ Transaction Isolation Level เป็นต้น

6) Database Server Configuration
การจัดการเกี่ยวกับเรื่อง Server Configuration ก็มีความสำคัญไม่ยิ่งหย่อนไปกว่ากัน ยกตัวอย่างดังตารางด้านล่างครับ

SQL Server
Configuration Settings Advanced
Setting? Requires
Restart? Default Value Current Value
affinity mask Yes Yes 0
awe enabled Yes Yes 0
cost threshold for parallelism Yes No 5
cursor threshold Yes No -1
fill factor (%) Yes Yes 0
index create memory (KB) Yes No 0
lightweight pooling Yes Yes 0
locks Yes Yes 0
max degree of parallelism Yes No 0
max server memory (MB) Yes No 2147483647
max text repl size (B) No No 65536
max worker threads Yes Yes 255
min memory per query (KB) Yes No 1024
min server memory (MB) Yes No 0
nested triggers No No 1
network packet size (B) Yes No 4096
open objects Yes Yes 0
priority boost Yes Yes 0
query governor cost limit Yes No 0
query wait (s) Yes No -1
recovery interval (m) Yes No 0
scan for startup procs Yes No 0
set working set size Yes Yes 0
user connections
Reference: http://www.sql-server-performance.com/articles/per/performance_audit_part4_p1.aspx

ยกตัวอย่างเช่น เรื่อง Fill Factor (รายการที่ 5) เป็นกำหนดค่าเพื่อแก้ปัญหาเกี่ยวกับการใช้ Index คือเมื่อเราเพิ่ม index เข้าไปมากๆ จะมีผลทำให้การ Select เร็วขึ้นก็จริง แต่จะมีผลข้างเคียงคือทำให้ การ Insert ข้อมูลช้าลง การกำหนดค่า Fill Factor ที่เหมาะสมจะช่วยทำให้ การ Insert เร็วขึ้นนั่นเอง

ผมจะลองยกอีกสัก config นึงก็คือ AWE – Advanced Windows Extension (รายการที่ 2) ในบางครั้งถึงแม้จะมี memory อยู่มากมายก็ตาม เป็นการกำหนดให้ SQL Server 32 bits สามารถมองเห็น Memory เกินกว่า 4GB ได้ เพื่อเพิ่มพื้นที่ Memory ให้กับ SQL Server ผลก็คือจะทำให้เพิ่ม Performance ขึ้นมานั่นเองครับ

7) Data Warehouse Strategy
หลังจากที่ได้ลองทำทุกวิถีทางไปเรียบร้อยแล้ว แต่ถ้ามันยังไม่ได้ผลมากมายตามที่ต้องการ ก็คงถึงขั้นตอนต่อไปแล้วหล่ะครับ คือการทำ Data Warehouse

อย่างที่ผมเคยกล่าวไปในตอนที่ 2 (click) นี่เป็น Database Design ที่นำเอาข้อดีของ Database Architecture แต่ละแบบมาผสมกัน แต่ก็มีเสียก็คืออาจจะต้องมีค่าบำรุงรักษาสูงขึ้น เพราะฉะนั้นถ้าจะพิจารณานำ Data Warehouse ไปใช้ ก็ควรจะวิเคราะห์ก่อนว่าคุ้มค่าที่จะลงทุนหรือไม่ครับ

8) Hardware Upgrade Strategy
สุดท้ายจริงๆ ก็คือการขยาย Server น่ะแหล่ะครับ ประมาณว่าถ้าใช้ 1 เครื่องแล้วยังช้า ก็ต้องขยายเป็น 2 Servers, 4 Server, 8 Servers ไปเรื่อยๆ ครับ ถ้าใช้ 100 Servers แล้วยังช้าอยู่ก็ให้มันรู้ไปครับ

ตัวอย่างนึงก็ยกเข้ามาประกอบในกรณีนี้ได้ดีก็คือ Google ครับ, Google เป็นระบบ Database ที่มีขนาดใหญ่ที่สุดในโลกก็ว่าได้ครับ เพราะว่า Google เก็บข้อมูลทุกอย่างที่อยู่ใน Internet ของโลก ทั้งหมด เท่าที่ผมทราบ Google น่าจะมี server ทั้งหมดทั่วโลกไม่ต่ำกว่า 600,000 Servers น่ะครับ

สรุปขั้นตอนในการ Tuning
สรุปว่าการ Tuning นั้น ควรจะทำเท่าที่เราทำได้ก่อน เพื่อที่เราอาจจะเสียเงินโดยไม่จำเป็นก็ได้ โดยอาจจะเริ่ม Tuning ในส่วนที่เป็น software หรือว่าการ config เพื่อให้ได้ performance ที่ดีที่สุดก่อนที่คิดจะลงทุน update ทางด้าน Hardware ต่อไปครับ

credit : http://yongyutde.spaces.live.com/blog/cns!A1F444837F369955!556.entry