BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: udomchok ที่ พฤศจิกายน 11, 2010, 22:09:43 PM
-
ก่อนอื่นขอออกตัวไว้ก่อนว่าผมไม่ได้มา blame ใคร และผมก็ไม่ได้เก่งในเรื่องทำ Report หรือการเขียน SQL มากนัก แต่ก็พอใช้งานได้
การทำ Report ของพวกเราชาว Admin HOSxP นั้น หลาย ๆ ท่านสอบถามมาเกี่ยวกับการใช้คำสั่งรูปแบบต่าง ๆ การกำหนดเงื่อนไขต่าง ๆ เพื่อที่จะสร้าง report ใหม่ ๆ ขึ้นมา แต่(คิดว่า)ยังไม่มีใครเคยตรวจสอบ Report ที่มากับตัวโปรแกรม และหลาย ๆ ท่านนำไปใช้งาน
นอกจากนี้มีหลาย ๆ เงื่อนไขในการทำรายงานเพื่อให้สารสนเทศที่ถูกต้องบางเงื่อนไข เรายังใช้กันไม่ถูกต้อง ซึ่งผมเคยแนะนำไปในกระทู้ก่อนหน้านี้แล้ว เช่น การใช้เงื่อนไขเวลา อาจทำให้ข้อมูล/สารสนเทศที่ได้ผิดพลาด
ลองดูตัวอย่าง report นี้ครับ
SYSTEM-RX-DRUG-USE-TOP-PRICE-SUMMARY
ChangeReportSQL('select d.name,d.strength,d.units,count(distinct vn) as vn_count,sum(qty) as sum_qty,sum(o.sum_price) as sum_price '+
' from opitemrece o,drugitems d '+
' where o.icode = d.icode and o.rxdate '+
' between "'+ds1+'" and "'+ds2+'" '+
' group by d.name,d.strength,d.units '+
' order by sum_price desc limit 20 ');
เปรียบเทียบกับ
ChangeReportSQL('select concat(d.name," ", d.strength," ", d.units) as drugname, count(o.icode) as scripts, sum(o.qty) as sumqty, sum(o.sum_price) as sumprice ' +
'from opitemrece o ' +
'join drugitems d on d.icode=o.icode ' +
'where (o.rxdate between "' + bdate + '" and "' + edate + '") ' +
'group by o.icode ' +
'order by sumprice desc ' +
'limit 20');
ซึ่งเป็นชุดคำสั่งที่ผมเขียนขึ้น (ก่อนจะไปเปิดดูใน "รายงาน","ระบบรายงานหลัก" แล้วเจอเจ้าตัวรายงานข้างบน...เพราะให้น้องห้องยาเปิดใช้...ผมเลยไม่ค่อยได้ดู) ไปทำเป็น Custom report อีกตัวหนึ่งแทน (CUSTOM-Top20DrugUse) ตามที่เคยเผยแพร่ไปแล้ว
พบว่าชุดคำสั่งทั้ง 2 ให้ผลเกือบเหมือนกัน แต่ที่ต่างกันคือจำนวนใบสั่งยา ซึ่งได้จาก count(distinct vn) as vn_count และ count(o.icode) as scripts
ต่างกันอย่างไร...ผมขออธิบายนิดหนึ่ง
ใน SYSTEM-RX-DRUG-USE-TOP-PRICE-SUMMARY ใช้การนับใบสั่งยา (ในตัว Report ใช้คำว่า "รายการ") จาก vn โดยเลือกนับ vn ที่ไม่ซ้ำกัน (distinct vn) คำสั่งนี้จะไม่ผิดพลาดหาก vn ใน opitemrece มีค่าทั้งหมด (ไม่เป็นค่าว่าง) แต่ในความเป็นจริงเราจะพบว่า vn ใน opitemrece สามารถเป็นค่าว่างได้ กรณีที่รายการยานั้นเป็นของผู้ป่วยใน ดังนั้นการนับโดยใช้ vn แบบไม่ซ้ำกัน จึงผิดพลาด เพราะจะไปนับเอาใบสั่งยาของผู้ป่วยในที่มีหลายใบเป็นในเดียวกัน....นี่แหละทำให้จำนวนใบสั่งยา ("รายการ" ในตัว Report) จึงน้อยกว่าที่ควรจะเป็น
ดังนั้น...จงอย่าเชื่อสิ่งที่คนอื่นบอกทั้งหมด ให้ใช้หลักกาลามสูตร 10 ประการ (http://th.wikipedia.org/wiki/%E0%B8%81%E0%B8%B2%E0%B8%A5%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B9%E0%B8%95%E0%B8%A3) ของพระพุทธเจ้าที่ตรัสสอนไว้ครับ
ผมอยากให้พวกเราได้ข้อมูล/สารสนเทศที่ถูกต้อง เพื่อนำไปตอบสนองผู้ที่ต้องการใช้อย่างถูกต้อง
-
ขอบคุณครับ อ.โก้
-
ฝากพวกเราที่เขียน REPORT ช่วยตรวจสอบกันด้วยครับ :D :D
-
... นั่นแหล่ะครับ คือเหตุผลที่ว่าทำไมเวลาผมจะทำ Report สักตัว ต้องคิดมาก เรื่องมาก ;D ....
... บางที่ user ที่ขอรายงานจากเรา เขาไม่รู้หรอกครับว่าข้อมูลที่เขาได้รับจากเราไปมันถูกต้องหรือเปล่า ได้ข้อมูลที่ถูกต้องไปใช้ก็ดีไป ถ้าได้ที่ไม่ถูกต้องไปใช้บางทีก็เป็นปัญหาได้ครับ
ดังนั้นก็ต้องเป็นหน้าที่ของเราครับ ที่จะต้องใช้ความรอบครอบในการที่จะนำข้อมูลจากฐานข้อมูลของเรามาออกเป็นรายงานหรือนำไปใช้งาน
หรือบางที ใน รพ. แต่ละแห่งก็มีระบบการทำงานบางงานที่ไม่เหมือนกัน การนำรายงานจากที่อื่นที่มีระบบการทำงานที่ต่างกันไปใช้ ก็อาจจะทำให้ได้ข้อมูลที่ผิดพลาดก็ได้ครับ
อันนี้เป็นอีกเหตุผลหนึ่งที่เวลามีคนมาขอตาราง reporttemplate แล้วผมไม่ค่อยได้ให้ไป ไม่ได้หวงอะไรหรอกครับ แต่กลัวว่าเกิดเอาไปใช้จริงแล้วอาจจะมีข้อผิดพลาดได้น่ะครับ
เป็น Admin หรือผู้ทำรายงาน ต้องละเอียดและรอบครอบครับ ... :D ...
-
;D ;D ;D นี่คือปัญหาหนึ่งที่ทำให้ผมไม่ค่อยโพสต์ Report ขึ้นบอร์ดครับ เพราะบางรายงานมันดึงข้อมูลมาจากคนละที่กัน(แล้วแต่บริบทการคีย์ข้อมูลของแต่ละที่) ถ้าเข้าใจฐานข้อมูลของตัวเองก็สามารถนำไปประยุกต์ใช้ได้แต่ถ้าเก็บเอาไปใช้อย่างเดียวปัญหาก็เกิดเหมือนที่ป๋าโก้กับป๋าขวดว่ามาครับ ;D ;D ;D
-
;D ;D ;D นี่คือปัญหาหนึ่งที่ทำให้ผมไม่ค่อยโพสต์ Report ขึ้นบอร์ดครับ บลา บลา บลา ;D ;D ;D
... แหม ป๋า ช่างกล้านะ .... 55555555555555 ;D ;D ;D .......
-
;D ;D ;D
-
ทำจากแบบละเอียดน้อย ไป หา ละเอียดมากๆๆ
ผมจะพยายามทำที่ละส่วน แล้วตรวจสอบ ว่าข้อมูลเป็นเท่าไร
แล้วเอามารวมกัน มันต้องข้อมูลตรงกัน
ว่าเรา join ตารางมากขึ้น ถ้าเขียน sql ไม่ถูก มันจะหาย หรือเพิ่ม หรือ ผิด ได้ครับ
ต้องระวัง แบบที่ พี่โก้ บอก
ต้องพยายามตรวจสอบให้ดี
-
ขอบคุณ อ.โก้มากครับสำหรับความรู้ดีๆๆ ผมก็เจอบ่อยเหมือนกันครับ ที่เจ้าหน้าที่เดินมากขอรายงาน ถือกระดาษเศษเขียน 2 - 3 บรรทัดบอกขอรายงานแบบนี้หน่อย พอทำเสร็จบอกว่าไม่ใช่ไม่ถูก ช่วงหลังเวลาเขียนรายงานผมต้องทำข้อตกลงในเงื่อนกับคนที่ว่าก่อนครับแล้วค่อยเขียน เขียนเสร็จแจ้งให้มาดูว่าข้อมูล OK มั่ย ไม่ OK ปรับคำสั่งหรือแจ้งสาเหตุทำไมข้อมูลไม่ถูกครับ
-
ขอบคุณ อ.โก้มากครับสำหรับความรู้ดีๆๆ ผมก็เจอบ่อยเหมือนกันครับ ที่เจ้าหน้าที่เดินมากขอรายงาน ถือกระดาษเศษเขียน 2 - 3 บรรทัดบอกขอรายงานแบบนี้หน่อย พอทำเสร็จบอกว่าไม่ใช่ไม่ถูก ช่วงหลังเวลาเขียนรายงานผมต้องทำข้อตกลงในเงื่อนกับคนที่ว่าก่อนครับแล้วค่อยเขียน เขียนเสร็จแจ้งให้มาดูว่าข้อมูล OK มั่ย ไม่ OK ปรับคำสั่งหรือแจ้งสาเหตุทำไมข้อมูลไม่ถูกครับ
เคยถูกขอให้ทำรายงาน รายละเอียดไม่มีมากนัก ผมขอกลับบ้างให้อธิบายรายงานที่อยากได้ ถามนิยามของแต่ละ items คนขอรายงานปวดหัวกลับไป ผมก็มีเวลาหายใจได้ทำอย่างอื่นก่อน แบบนี้ก็เจอบ่อยครับ
-
...สำหรับทานใดที่นำ Report จากที่นี่ไปใช้ ก็ให้ตรวจสอบให้ดีก่อน เพราะบริบท แต่ละที่มีความต่าง เอาเป็นแนวทางได้แต่ไม่ใช่ว่าเอาไปใช้เลยโดยไม่ได้ตรวจสอบ....
-
...สำหรับทานใดที่นำ Report จากที่นี่ไปใช้ ก็ให้ตรวจสอบให้ดีก่อน เพราะบริบท แต่ละที่มีความต่าง เอาเป็นแนวทางได้แต่ไม่ใช่ว่าเอาไปใช้เลยโดยไม่ได้ตรวจสอบ....
ยืนยันตามอ.ณัฐ เลยครับ...ถึงแม้ผมไม่มีรายงานมาแบ่งปัน..แต่ก็ขอเอาใจช่วย..และรบกวนทวนสอบรายงานที่ออกมาก่อนนำไปใช้จริงครับ... :)
-
...สำหรับทานใดที่นำ Report จากที่นี่ไปใช้ ก็ให้ตรวจสอบให้ดีก่อน เพราะบริบท แต่ละที่มีความต่าง เอาเป็นแนวทางได้แต่ไม่ใช่ว่าเอาไปใช้เลยโดยไม่ได้ตรวจสอบ....
:D :D เห็นด้วยครับ หากนำไปใช้ควรตรวจสอบก่อน :D :D
-
ขอบคุณอ.โก้มากครับ ตรงใจเลยทีเดียวครับ
ผมเก็บรายงานเกือบทุกอันที่โพสขึ้นมา บางอันเก็บไว้เฉยๆ คงต้องใช้เวลาตรวจสอบนาน
เพราะผมทำงานไม่ตรงสายงาน บางรายงานยังไม่เข้าใจ Code ก็ยังไม่กล้าใช้เหมือนกัน
บางรายงานต้องตรวจสอบกับข้อมูลที่มีในตารางจริง นับกันเป็นราย record เลยเพื่อดูว่าตรงไม๊ถึงจะกล้าใช้
ต้องขอขอบคุณ และขอเป็นกำลังใจให้อาจารย์ทุกท่านที่โพสแจกรายงานต่างๆ
สำหรับผมที่เขียนรายงานไม่เป็น อยู่ได้เพราะรายงานที่ท่านเอื้อเฟื้อมานี่แหละครับ
รพ.ผมได้ประโยชน์จากท่านไม่น้อย
สำคัญที่ผู้นำไปใช้ต้องตรวจสอบอย่างละเอียดก่อนว่าตรงตามบริบทความต้องการหรือไม่
-
ขอบคุณมากครับ
-
ผมเองเขียน รายงาน โดยจะเพิ่มรหัส กลางใว้โดยเพิ่มใน record ตาราง sys_var เพื่อคนที่นำรายงานไปใช้ จะได้ไม่ต้องแก้ไขรายงานเลย ไปแก้ ค่าใน sys_value ให้ตรงกับ รหัสเดิมของเรา ในแต่ละตารางเท่านั้น
แต่ถ้า รายการนั้นมีมากเกินไปผมจะไปเพิ่มตารางหรือ ฟิวด์ เพื่อเป็น รหัสกลาง อีกต่างหาก นอกเหนือจาก ตารางเดิมของ อ.ชัยพร
ตัวอย่างที่เพิ่ม record ใน ตาราง sys_var