ใช้โพรซีเยอร์ที่จัดเก็บไว้

โพรซีเยอร์ที่จัดเก็บไว้คือรูทีนย่อยที่แอปพลิเคชันซึ่งเข้าถึงระบบฐานข้อมูลเชิงสัมพันธ์สามารถใช้งานได้ เมื่อคุณเชื่อมต่อกับ SAP Sybase ASE, Microsoft SQL Server หรือฐานข้อมูล Teradata ด้วย Tableau คุณสามารถใช้โพรซีเยอร์ที่จัดเก็บไว้เพื่อกำหนดการเชื่อมต่อได้

สำหรับ Oracle คุณสามารถใช้ฟังก์ชันตารางเพื่อกำหนดการเชื่อมต่อได้ ฟังก์ชันตารางของ Oracle จะทำหน้าที่เหมือนโพรซีเยอร์ที่จัดเก็บไว้และระบุไว้ภายใต้โพรซีเยอร์ที่จัดเก็บไว้ในหน้าแหล่งข้อมูล

เมื่อคุณสร้างแหล่งข้อมูลด้วยข้อมูลประเภทต่างๆ เหล่านี้ โพรซีเยอร์ที่สามารถใช้งานได้จะระบุไว้ภายใต้โพรซีเยอร์ที่จัดเก็บไว้ ดังที่ปรากฏในตัวอย่างของ Microsoft SQL Server ดังนี้

จากบานหน้าต่างด้านซ่าย ให้ลากโพรซีเยอร์ไปยังแคนวาสหรือดับเบิลคลิกที่โพรซีเยอร์รายการใดรายการหนึ่งที่ระบุไว้ หากโพรซีเยอร์มีพารามิเตอร์ให้ใช้งาน พารามิเตอร์จะแสดงกล่องโต้ตอบขึ้นมาโดยอัตโนมัติ 

คุณสามารถใช้พารามิเตอร์ Tableau เดิมหรือสร้างพารามิเตอร์ Tableau ขึ้นใหม่แทนการป้อนค่าได้ดังนี้

หากคุณเปิดเผยพารามิเตอร์ Tableau ในมุมมอง ผู้ใช้จะสามารถเปลี่ยนแปลงค่าของพารามิเตอร์ในโพรซีเยอร์แบบโต้ตอบได้

โพรซีเยอร์ที่จัดเก็บไว้ไม่รองรับการรวมศูนย์ การเชื่อมโยง หรือการผนวก โพรซีเยอร์เหล่านี้จะแสดงในตารางตรรกะเดียวในชั้นทางตรรกศาสตร์ และไม่อนุญาตให้เปิดแคนวาสการผนวก/การรวม (ชั้นทางกายภาพ)

หมายเหตุเกี่ยวกับโพรซีเยอร์ที่จัดเก็บไว้

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

  • หากโพรซีเยอร์ที่จัดเก็บไว้ส่งคืนเซตผลลัพธ์มากกว่าหนึ่งรายการ Tableau จะอ่านผลลัพธ์รายการแรกและข้ามรายการที่เหลือ

  • หากโพรซีเยอร์ที่จัดเก็บไว้มีพารามิเตอร์เอาต์พุต Tableau จะกรองโพรซีเยอร์ที่จัดเก็บไว้ออก

  • โพรซีเยอร์ที่จัดเก็บไว้ซึ่งมีพารามิเตอร์ประเภทไม่ใช่สเกลาร์จะถูกยกเว้น

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

    "เซตผลลัพธ์... ไม่มีคอลัมน์ที่ใช้งานได้"

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

  • หากไม่มีการระบุค่าให้พารามิเตอร์ที่โพรซีเยอร์ที่จัดเก็บไว้ต้องใช้งาน จะทำให้เกิดข้อผิดพลาด Tableau ไม่สามารถกำหนดล่วงหน้าได้ว่าต้องใช้พารามิเตอร์ใดบ้าง

  • Tableau จะไม่ดำเนินการจัดการธุรกรรมใดๆ สำหรับโพรซีเยอร์ที่จัดเก็บไว้ ซึ่งผู้เขียนโพรซีเยอร์ที่จัดเก็บไว้จะต้องไม่พึ่งพา Tableau เพื่อเริ่มต้นธุรกรรมก่อนเรียกใช้โพรซีเยอร์ที่จัดเก็บไว้ หรือดำเนินการดังกล่าวหลังจากนั้น

  • ชื่อคอลัมน์ของโพรซีเยอร์ที่จัดเก็บไว้ที่ใช้เพื่อทำงานจะต้องไม่ซ้ำกัน หากคอลัมน์ทั้งสองคอลัมน์มีชื่อเดียวกันหรือไม่ได้ระบุชื่อไว้ โพรซีเยอร์อาจเกิดข้อผิดพลาดขึ้นได้

  • หากมีการค้นหาหลายรายการในโพรซีเยอร์ที่จัดเก็บไว้ (ตัวอย่างเช่น หากต้องการอ่านค่าจากตารางอื่น หรือเพื่อจัดเก็บชุดค่าผสมไว้ถาวร) การค้นหาแต่ละรายการต้องส่งคืนชุดคอลัมน์เดียวกันในลำดับเดียวกัน (ชื่อและประเภทข้อมูลเดียวกัน) หากต้องการรับประกันว่าลำดับของคอลัมน์และชื่อตรงกันในผลลัพธ์การค้นหา คุณจำเป็นต้องตั้งชื่อ CAST ให้ชัดเจนเพื่อรับประกันว่าประเภทข้อมูลนั้นถูกต้อง เช่น CAST(Username as VARCHAR(20)) และตั้งชื่อคอลัมน์ให้ชัดเจนด้วย หากโพรซีเยอร์ที่จัดเก็บไว้ไม่เป็นไปตามคำแนะนำดังกล่าว ข้อความแสดงข้อผิดพลาดอาจปรากฏขึ้นดังนี้

    "InsertData: ข้อผิดพลาดคอลัมน์ unbound"

  • หากมีการค้นหาหลายรายการในโพรซีเยอร์ที่จัดเก็บไว้ (ตัวอย่างเช่น หากต้องการอ่านค่าจากตารางอื่น หรือเพื่อจัดเก็บชุดค่าผสมไว้ถาวร) และโพรซีเยอร์ได้สร้างข้อผิดพลาดขึ้นมาอย่างต่อเนื่อง ให้ลองเพิ่ม SET NOCOUNT ON ตรงส่วนบนสุดของโพรซีเยอร์ การดำเนินการเช่นนี้จะเป็นการป้องกันข้อความที่แสดงการนับจำนวนแถวที่ได้รับผลกระทบจากคำสั่ง Transact-SQL จากการส่งคืนโดยเป็นส่วนหนึ่งของเซตผลลัพธ์สำหรับการสืบค้น

โดยข้อจำกัดต่อไปนี้ยังใช้กับฐานข้อมูลบางรายการอีกด้วย

ข้อจำกัดของโพรซีเยอร์ที่จัดเก็บไว้สำหรับฐานข้อมูล Teradata

ข้อจำกัดต่อไปนี้ใช้กับโพรซีเยอร์ที่จัดเก็บไว้บนฐานข้อมูล Teradata

  • ต้องมีการระบุค่าสำหรับทุกพารามิเตอร์ หากผู้ใช้ไม่ได้ระบุค่าสำหรับพารามิเตอร์อย่างน้อยหนึ่งรายการ Tableau จะแสดงข้อผิดพลาดของฐานข้อมูล Teradata ที่ระบุว่ามีการกำหนดค่าสำหรับโพรซีเยอร์ที่จัดเก็บไว้น้อยเกินไป

ข้อจำกัดของโพรซีเยอร์ที่จัดเก็บไว้สำหรับฐานข้อมูล SQL Server

ข้อจำกัดต่อไปนี้ใช้กับโพรซีเยอร์ที่จัดเก็บไว้บนฐานข้อมูล SQL Server

  • หากเซตผลลัพธ์สำหรับโพรซีเยอร์ที่จัดเก็บไว้มีคอลัมน์ของประเภท IMAGE หรือ TEXT โพรซีเยอร์ที่จัดเก็บไว้จะล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดที่ว่า "ไวยากรณ์ไม่ถูกต้อง"

  • หากความกว้างโดยรวมของเซตผลลัพธ์ (จำนวนไบต์ในแต่ละแถว) เกินกว่า 8060 โพรซีเยอร์ที่จัดเก็บไว้จะล้มเหลว ซึ่งสามารถเกิดได้กับตารางที่กว้างเป็นอย่างมาก (กว่าร้อยคอลัมน์) หรือกับตารางที่มีคอลัมน์ข้อความขนาดใหญ่ซึ่งใช้เพื่อจัดเก็บข้อความกว่าพันตัวอักษร

  • Tableau จะไม่แสดงโพรซีเยอร์ที่จัดเก็บไว้จากสคีมา "sys"

  • หากผู้ใช้ไม่ระบุค่าในพารามิเตอร์ที่โพรซีเยอร์ต้องใช้งานมากกว่าหนึ่งรายการ Tableau จะแสดงข้อผิดพลาดของฐานข้อมูล SQL Server ในรูปแบบ "โพรซีเยอร์ต้องใช้ค่าสำหรับพารามิเตอร์ @x แต่กลับไม่มีการระบุไว้"

  • โพรซีเยอร์ที่จัดเก็บไว้ที่มีการสืบค้นหลายรายการจะต้องเป็นไปตามคำแนะนำที่ระบุไว้ในหมายเหตุเกี่ยวกับโพรซีเยอร์ที่จัดเก็บไว้ (ข้างต้น)

  • Tableau Desktop ไม่รองรับประเภทข้อมูล TIME ของ Microsoft SQL Server เมื่อมีการเพิ่มข้อมูลในฟิลด์ประเภทนี้ในโพรซีเยอร์ที่จัดเก็บไว้บนฐานข้อมูล Microsoft SQL Server จะส่งผลให้ Tableau Desktop ไม่นำเข้าข้อมูลดังกล่าว

ข้อจำกัดของโพรซีเยอร์ที่จัดเก็บไว้สำหรับฐานข้อมูล SAP Sybase ASE 

ข้อจำกัดต่อไปนี้ใช้กับโพรซีเยอร์ที่จัดเก็บไว้บนฐานข้อมูล SAP Sybase ASE (เฉพาะ Windows เท่านั้น)

  • ฐานข้อมูลต้องมีเซิร์ฟเวอร์ระยะไกลที่กำหนดค่าไว้อย่างเหมาะสม

  • หากผู้ใช้ไม่ระบุค่าในพารามิเตอร์ที่โพรซีเยอร์ต้องใช้งานมากกว่าหนึ่งรายการ Tableau จะแสดงข้อผิดพลาดของฐานข้อมูล Sybase ASE ในรูปแบบ "โพรซีเยอร์ต้องใช้ค่าสำหรับพารามิเตอร์ @x แต่กลับไม่มีการระบุไว้"

ขอบคุณสำหรับข้อเสนอแนะของคุณส่งข้อเสนอแนะของคุณเรียบร้อยแล้ว ขอขอบคุณ