ทำ dashboard บน Data Studio ให้ผู้ใช้ เห็นข้อมูลบน BigQuery เฉพาะส่วนของตัวเอง

หลายๆ องค์กร มีการใช้งาน BigQuery เป็น data warehouse ที่เก็บข้อมูลส่วนกลางขนาดใหญ่ การออกแบบ data warehouse ให้รองรับการใช้งานจากผู้ใช้หลายกลุ่ม สามารถทำได้หลายวิธี เช่นการกำหนดสิทธิ์ที่ระดับ dataset หรือการสร้าง view เพื่อให้ผู้ใช้ เห็นเฉพาะผลลัพธ์ของ view นั้นๆ โดยไม่สามารถเข้าถึงข้อมูลทั้ง table ได้

อีกกรณีหนึ่งก็คือ การทำ dashboard ให้ผู้ใช้แต่ละคนเข้ามาใช้งาน dashboard เดียวกัน แต่ข้อมูลที่แสดงนั้น จะถูกดึงตามผู้ใช้งานที่กำลังเปิด dashboard อยู่ คือเห็นเฉพาะข้อมูลที่เกี่ยวข้องกับตัวเองเท่านั้น วิธีนี้มีข้อดีคือ เราจะสร้างและดูแล dashboard แค่ตัวเดียว โดยที่ผู้ใช้ก็จะเห็นข้อมูลของตัวเองเท่านั้น ไม่เห็นข้อมูลของผู้อื่น ไม่ต้องทำ dashboard แยกสำหรับผู้ใช้แต่ละกลุ่ม หรือแต่ละคน

การ implement ในลักษณะนี้ อธิบายได้ด้วยแผนภาพนี้ครับ



ในตัวอย่าง เรามีข้อมูลอยู่ 2 table คือ
  • data_by_region (d) เป็นตัวอย่างข้อมูลที่แสดงเคสผู้ป่วย COVID-19 ในอิตาลี มี schema คือ
    • date: วันที่เจอเคส
    • region_name: ภูมิภาคที่เจอเคส
  • region_acl_table (a) เป็นตารางที่ใช้ระบุว่า user ไหนสามารถดูข้อมูลจาก region ไหนได้บ้าง มี schema คือ
    • region: ภูมิภาคที่ได้สิทธิ์ดูข้อมูล
    • email: ชื่อผู้ใช้ที่ได้สิทธิ์
ตัวอย่างข้อมูล dataset covid19_italy มี 2 table

data_by_region เป็นตารางข้อมูลหลัก

region_acl_table เป็นตารางที่ใช้กำกับสิทธิ์ในตารางข้อมูลหลัก

การทำให้ Data Studio แสดงผลเฉพาะข้อมูลของผู้ใช้นั้น เราจะสร้าง connector ขึ้นมาด้วย Apps Script ซึ่งใน script นี้เราสามารถระบุ SQL query ให้ดึงข้อมูลจากทั้ง 2 table มา join กันด้วย region และ ใส่ where เพื่อกรองเฉพาะข้อมูลที่ผู้ใช้ได้สิทธิ์

ตัวอย่าง query ที่ใช้ email ของ user เพิ่อดึงเฉพาะข้อมูลที่เกี่ยวข้อง

กำหนดค่าใน function getFields() ให้ตรงกับข้อมูลที่ query

เพิ่ม Library สำหรับทำ OAuth2 เพื่อเรียกใช้งาน service account

script นี้จะใช้สิทธิ์ของ service account ซึ่งสามารถแยก project จาก project หลักที่เก็บข้อมูลอยู่ได้ แต่ service account นี้จำเป็นต้องได้สิทธิ์เพื่อเข้าถึงข้อมูลบน project หลัก และค่าใช้จ่ายจากการ query จะถูกคิดบน project ที่เป็นเจ้าของ service account นี้

copy ข้อมูลจากไฟล์ service account ที่ download ลงมา เก็บไว้ที่ Script properties เพื่อความสะดวกในการใช้งาน

การสร้าง dashboard สามารถกด link จากหน้า script ที่เมนู Deploy from manifest และให้สิทธิ์ connector ไปตามขั้นตอน เมื่อสร้าง dashboard เรียบร้อย ก็สามารถแชร์ dashboard ให้กับผู้ใช้งานเพื่อให้เข้ามาดูข้อมูลได้

กำหนดค่าใน manifest ของ script ให้ครบถ้วน


กด link จาก Deployments head ได้เลย

อย่าลืมแชร์ script ให้ user เข้าถึงได้ด้วย

การเข้าใช้งานนั้น ผู้ใช้จำเป็นต้องยืนยันตัวตนด้วย Google Account (เพื่อให้ ระบบรู้จัก user และสามารถนำไปใช้เพื่อดึงข้อมูลต่อได้) การเข้าใช้งานครั้งแรก ผู้ใช้จะต้องให้สิทธิ์ connector ก่อน

ครั้งแรก ผู้ใช้ต้องกดให้สิทธิ์ก่อน

กดให้สิทธิ์ไปตามขั้นตอน

ได้ข้อมูลเฉพาะส่วนที่กำหนดไว้

dashboard เดียวกัน หากเข้าด้วยอีก user หนึ่ง ก็จะได้ข้อมูลคนละชุด

บทความนี้ เพียงแต่นำข้อมูลตัวอย่างมาทำให้เป็นภาพเท่านั้น ในการใช้งานจริง สามารถประยุกต์การดึงข้อมูลจากการเขียน query ได้หลากหลายมาก ขึ้นอยู่กับ use case ทางธุรกิจ ว่าต้องการดึงข้อมูลอย่างไร มาแสดงให้ผ้ใช้แต่ละกลุ่มได้ใช้งาน

ทั้งนี้ สามารถศึกษารายละเอียดเพิ่มเติมได้จากที่มาครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเรียกใช้งาน Google Apps Script

ลดเวลาการเรียก API ใน Apps Script ด้วย fecthAll

ออกแบบระบบให้คุยข้าม module กันได้ ด้วย Pub/Sub