[Cross-posted on blog.niwpopkorn.com]
หลายๆ องค์กร มีการใช้งาน 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: ชื่อผู้ใช้ที่ได้สิทธิ์
การทำให้ Data Studio แสดงผลเฉพาะข้อมูลของผู้ใช้นั้น เราจะสร้าง connector ขึ้นมาด้วย Apps Script ซึ่งใน script นี้เราสามารถระบุ SQL query ให้ดึงข้อมูลจากทั้ง 2 table มา join กันด้วย region และ ใส่ where เพื่อกรองเฉพาะข้อมูลที่ผู้ใช้ได้สิทธิ์
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 ให้กับผู้ใช้งานเพื่อให้เข้ามาดูข้อมูลได้
การเข้าใช้งานนั้น ผู้ใช้จำเป็นต้องยืนยันตัวตนด้วย Google Account (เพื่อให้ ระบบรู้จัก user และสามารถนำไปใช้เพื่อดึงข้อมูลต่อได้) การเข้าใช้งานครั้งแรก ผู้ใช้จะต้องให้สิทธิ์ connector ก่อน
บทความนี้ เพียงแต่นำข้อมูลตัวอย่างมาทำให้เป็นภาพเท่านั้น ในการใช้งานจริง สามารถประยุกต์การดึงข้อมูลจากการเขียน query ได้หลากหลายมาก ขึ้นอยู่กับ use case ทางธุรกิจ ว่าต้องการดึงข้อมูลอย่างไร มาแสดงให้ผ้ใช้แต่ละกลุ่มได้ใช้งาน
ทั้งนี้ สามารถศึกษารายละเอียดเพิ่มเติมได้จากที่มาครับ
ที่มา: Row level filtering with Data Studio and BigQuery