แชร์ผ่าน


การอ้างอิงตัวแปรในกระแสข้อมูล

Note

บทความนี้มุ่งเน้นไปที่สถาปัตยกรรมโซลูชันจาก สถาปัตยกรรมโซลูชัน CI/CD และ ALM (Application Lifecycle Management) สําหรับ Dataflow Gen2 ที่อาศัย การรวมไลบรารีตัวแปร และใช้ได้กับ Dataflow Gen2 ที่มีการสนับสนุน CI/CD เท่านั้น

ไลบรารีตัวแปรแฟบริกใน Dataflow Gen2 เปิดใช้งานการจัดการการกําหนดค่าแบบรวมศูนย์ที่นํากลับมาใช้ใหม่ได้ในสภาพแวดล้อมต่างๆ ด้วยการอ้างอิงตัวแปรโดยตรงในสคริปต์กระแสข้อมูลของคุณ คุณสามารถปรับลักษณะการทํางานแบบไดนามิกโดยไม่ต้องใช้ค่าฮาร์ดโค้ด ซึ่งเหมาะสําหรับเวิร์กโฟลว์ CI/CD การผสานรวมนี้ช่วยลดความยุ่งยากในการปรับใช้ข้ามขั้นตอนโดยอนุญาตให้แทรกค่าเฉพาะพื้นที่ทํางาน (เช่น Lakehouse หรือ Workspace ID) ในขณะรันไทม์ ทําให้กระแสข้อมูลของคุณปรับเปลี่ยนและบํารุงรักษาได้มากขึ้น

บทช่วยสอนนี้จะแนะนําคุณเกี่ยวกับโซลูชันตัวอย่างที่ใช้การอ้างอิงตัวแปรในกระแสข้อมูล และแสดงวิธีการ:

  • ตั้งค่าตัวแปร: การใช้ไลบรารีตัวแปร Fabric และประเภทข้อมูลที่แตกต่างกัน
  • แหล่งที่มาที่ขับเคลื่อนด้วยตัวแปร: การใช้ Lakehouse ที่มีชุดข้อมูลตัวอย่าง WideWorldImpoters เป็นแหล่งข้อมูล
  • ตรรกะที่ขับเคลื่อนด้วยตัวแปร: การใช้วิดเจ็ตอินพุตที่พร้อมใช้งานตลอดประสบการณ์กระแสข้อมูล
  • ปลายทางที่ขับเคลื่อนด้วยตัวแปร: การใช้คลังสินค้าเป็นปลายทาง

ไดอะแกรมของสถาปัตยกรรมโซลูชันที่ใช้การอ้างอิงตัวแปรใน Dataflow Gen2

Note

แนวคิดที่แสดงในบทความนี้เป็นสากลสําหรับ Dataflow Gen2 และใช้ได้กับแหล่งข้อมูลและปลายทางอื่นๆ นอกเหนือจากที่แสดงไว้ที่นี่

สถานการณ์สมมติ

สกรีนช็อตของคิวรีที่มีชื่อ dimension_city สําหรับสถานการณ์ภายใน Dataflow Gen2

กระแสข้อมูลที่ใช้ในสถานการณ์นี้เรียบง่าย แต่หลักการหลักที่อธิบายไว้ใช้กับกระแสข้อมูลทุกประเภท มันเชื่อมต่อกับตารางที่ชื่อ dimension_city จากชุดข้อมูลตัวอย่าง Wide World Importers ที่จัดเก็บไว้ใน Lakehouse กรองแถวที่คอลัมน์ SalesTerritory เท่ากับ ตะวันออกเฉียงใต้ และโหลดผลลัพธ์ลงในตารางใหม่ที่เรียกว่า เมืองในคลังสินค้า ส่วนประกอบทั้งหมด - เลคเฮาส์ คลังสินค้า และกระแสข้อมูล - อยู่ในพื้นที่ทํางานเดียวกัน เมื่อต้องการทําให้กระแสข้อมูลเป็นแบบไดนามิก คุณใช้ตัวแปรเพื่อขับเคลื่อนตารางต้นทาง ค่าตัวกรอง และตารางปลายทาง การเปลี่ยนแปลงเหล่านี้ช่วยให้กระแสข้อมูลทํางานด้วยค่าที่จัดเก็บไว้ในไลบรารีตัวแปร Fabric แทนที่จะเป็นค่าที่ฮาร์ดโค้ด

ตั้งค่าตัวแปร

Note

ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานไลบรารีตัวแปร Fabric สําหรับองค์กรหรือกลุ่มความปลอดภัยของคุณ เรียนรู้เพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งานไลบรารีตัวแปร

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

ชื่อตัวแปร ประเภท จุดประสงค์
WorkspaceId Guid ใช้สําหรับสคริปต์แหล่งข้อมูลและปลายทางในกระแสข้อมูล
LakehouseId Guid กําหนด ID ของเลคเฮาส์ที่ใช้เป็นแหล่งที่มา
รหัสคลังสินค้า Guid กําหนด ID ของคลังสินค้าที่ใช้เป็นปลายทาง
เขต สตริง ตั้งค่าที่ควรใช้เพื่อขับเคลื่อนตรรกะตัวกรองในกระแสข้อมูล

ตรวจสอบให้แน่ใจว่าได้ตั้งค่าเริ่มต้นที่สอดคล้องกับสภาพแวดล้อมของคุณเอง แล้วบันทึกไลบรารีตัวแปร

สกรีนช็อตของไลบรารีตัวแปร Fabric ที่สร้างขึ้นใหม่พร้อมตัวแปร WorkspaceId, LakehouseId, WarehouseId และ Territory

แหล่งที่มาที่ขับเคลื่อนด้วยตัวแปร

เมื่อใช้ตัวเชื่อมต่อ Fabric ใดๆ เช่น Lakehouse, Warehouse หรือ Fabric SQL ทั้งหมดจะเป็นไปตามโครงสร้างการนําทางเดียวกันและใช้รูปแบบอินพุตเดียวกัน ในสถานการณ์สมมตินี้ ไม่มีตัวเชื่อมต่อใดที่ต้องการการป้อนข้อมูลด้วยตนเองเพื่อสร้างการเชื่อมต่อ อย่างไรก็ตาม แต่ละรายการจะแสดงพื้นที่ทํางานและรายการที่เชื่อมต่อผ่านขั้นตอนการนําทางในคิวรีของคุณ ตัวอย่างเช่น ขั้นตอนการนําทางแรกจะรวม workspaceId ที่คิวรีเชื่อมต่อ

สกรีนช็อตของขั้นตอนการนําทาง 1 ที่มีค่า workspaceId ในแถบสูตรสําหรับคิวรี dimension_city

เป้าหมายคือการแทนที่ค่าฮาร์ดโค้ดในแถบสูตรด้วยตัวแปร โดยเฉพาะอย่างยิ่ง คุณต้องการใช้ตัวแปร WorkspaceId และ LakehouseId เพื่อขับเคลื่อนตรรกะนี้ ขั้นแรก คุณต้องนําตัวแปรเหล่านั้นเข้าสู่กระแสข้อมูล Gen2 วิธีการที่แนะนําคือการสร้างแบบสอบถามสําหรับตัวแปรที่แตกต่างกันแต่ละตัวเพื่อรวมศูนย์และจัดการตัวแปรใดๆ ที่คุณวางแผนจะใช้ได้อย่างง่ายดาย ในการทําเช่นนั้น ให้สร้างคิวรีเปล่าโดยไปที่ รับข้อมูล รายการ ใน Ribbon และเลือกตัวเลือก คิวรีเปล่า จากเมนูดรอปดาวน์

สกรีนช็อตของรายการในแท็บ รับข้อมูล ในแท็บ หน้าแรก เพื่อสร้างแบบสอบถามเปล่า

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

สกรีนช็อตของกล่องโต้ตอบคิวรีเปล่า

เมื่อคิวรีของคุณถูกสร้างขึ้นและปรากฏในกระแสข้อมูลแล้ว ให้เปลี่ยนชื่อเป็น WorkspaceId และแทนที่สูตรในขั้นตอน แหล่งที่มา เป็น:

Variable.ValueOrDefault("$(/**/My Library/WorkspaceId)", "Your Workspace ID")

โดยพื้นฐานแล้วสคริปต์นี้เป็นสคริปต์ที่สามารถกําหนดไลบรารีและตัวแปรที่จะดึงข้อมูลได้ อาร์กิวเมนต์ที่สองของ Variable.ValueOrDefault ฟังก์ชันจะกําหนดค่าที่จะระบุเมื่อไม่สามารถดึงตัวแปรได้

Note

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

ทําซ้ํากระบวนการนี้สําหรับตัวแปร LakehouseId และสร้างแบบสอบถามที่มีชื่อเดียวกันกับตัวแปร แต่ใช้สูตรต่อไปนี้สําหรับขั้นตอน แหล่งที่มา:

Variable.ValueOrDefault("$(/**/My Library/LakehouseId)", "Your Lakehouse ID")

Note

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

สกรีนช็อตแสดงคิวรีที่สร้างขึ้นใหม่ชื่อ LakehouseId และ WorkspaceId

เมื่อสร้างคิวรีทั้งสองแล้ว คุณสามารถอัปเดตสคริปต์คิวรีเพื่อใช้แทนค่าฮาร์ดโค้ดได้ ซึ่งเกี่ยวข้องกับการแทนที่ค่าเดิมในแถบสูตรด้วยตนเองด้วยการอ้างอิงไปยังคิวรี WorkspaceId และ LakehouseId สคริปต์แบบสอบถามต้นฉบับมีลักษณะดังนี้:

let
  Source = Lakehouse.Contents([]),
  #"Navigation 1" = Source{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
  #"Navigation 2" = #"Navigation 1"{[lakehouseId = "2455f240-7345-4c8b-8524-c1abbf107d07"]}[Data],
  #"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
  #"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
  #"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
  #"Removed columns"

เมื่อคุณอัปเดตการอ้างอิงในขั้นตอนการนําทาง สคริปต์ที่อัปเดตใหม่ของคุณอาจมีลักษณะดังนี้:

let
  Source = Lakehouse.Contents([]),
  #"Navigation 1" = Source{[workspaceId = WorkspaceId]}[Data],
  #"Navigation 2" = #"Navigation 1"{[lakehouseId = LakehouseId]}[Data],
  #"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
  #"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
  #"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
  #"Removed columns"

และคุณสังเกตเห็นว่ายังคงประเมินตัวอย่างข้อมูลในตัวแก้ไขกระแสข้อมูลอย่างถูกต้องด้วยการอ้างอิงโดยตรงที่สร้างขึ้นในมุมมองไดอะแกรมระหว่างคิวรีทั้งหมดที่เกี่ยวข้อง:

สกรีนช็อตที่มีการอ้างอิงคิวรี WorkspaceId และ LakehouseId ในคิวรี dimension_city

ตรรกะที่ขับเคลื่อนด้วยตัวแปร

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

Variable.ValueOrDefault("$(/**/My Library/Territory)", "Mideast")

สกรีนช็อตของคิวรี อาณาเขต ที่สร้างขึ้นในกระแสข้อมูล

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

สกรีนช็อตของวิดเจ็ตอินพุตในกล่องโต้ตอบแถวตัวกรองพร้อมตัวเลือกในการอ้างอิงคิวรี

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

สกรีนช็อตของคิวรี อาณาเขต ที่เลือกภายในวิดเจ็ตอินพุตจากกล่องโต้ตอบแถวตัวกรอง

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

สกรีนช็อตของมุมมองไดอะแกรม การตั้งค่าคิวรี และการแสดงตัวอย่างข้อมูลสําหรับคิวรี dimension_city ที่แสดงข้อมูลสําหรับเขตการขายตะวันออกกลาง

ปลายทางที่ขับเคลื่อนด้วยตัวแปร

Note

ขอแนะนําให้คุณทําความคุ้นเคยกับแนวคิดของปลายทางข้อมูลใน Dataflow Gen2 และวิธีสร้างสคริปต์ Mashup จากบทความเกี่ยวกับ ปลายทางข้อมูลและการตั้งค่าที่มีการจัดการ

ส่วนประกอบสุดท้ายที่จะปรับเปลี่ยนในสถานการณ์นี้คือปลายทาง แม้ว่าข้อมูลเกี่ยวกับปลายทางของข้อมูลจะสามารถพบได้ในตัวแก้ไขกระแสข้อมูล แต่หากต้องการปรับเปลี่ยนส่วนนี้ของกระแสข้อมูล คุณจําเป็นต้องใช้ Git หรือ REST API

สกรีนช็อตของเมนูลอยที่มีการตั้งค่าปลายทางข้อมูลสําหรับคิวรี dimension_city

บทช่วยสอนนี้แสดงวิธีทําการเปลี่ยนแปลงผ่าน Git ก่อนที่คุณจะสามารถทําการเปลี่ยนแปลงผ่าน git ได้ตรวจสอบให้แน่ใจว่าได้:

  • สร้างแบบสอบถามสําหรับตัวแปร WarehouseId: ทําตามกระบวนการเดียวกันกับที่อธิบายไว้ในส่วนก่อนหน้านี้เพื่อสร้างแบบสอบถามเปล่าใหม่ และแทนที่สูตรสําหรับขั้นตอน แหล่งที่มา เป็น:
Variable.ValueOrDefault("$(/**/My Library/WarehouseId)", "Your Warehouse ID")

Note

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

สกรีนช็อตของคิวรีทั้งหมดในกระแสข้อมูล รวมถึงคิวรี WarehouseId ที่สร้างขึ้นใหม่

สําคัญ

ตรวจสอบว่าคิวรีทั้งหมดที่มีตัวแปรถูกปิดใช้งานการจัดเตรียม สกรีนช็อตของตัวเลือกการจัดเตรียมสําหรับคิวรีในเมนูตามบริบท

  • บันทึกกระแสข้อมูล: ใช้ปุ่ม บันทึก ในแท็บ หน้าแรก ของ Ribbon

สกรีนช็อตของปุ่มบันทึกกระแสข้อมูล

เมื่อบันทึกกระแสข้อมูลของคุณแล้ว ให้ตรวจสอบให้แน่ใจว่าได้ยอมรับการเปลี่ยนแปลงไปยังที่เก็บ Git ของคุณและตรงไปที่ที่เก็บของคุณเพื่อดูไฟล์ mashup.pq ของกระแสข้อมูลของคุณ เมื่อดูไฟล์ mashup.pq ให้มองหาแบบสอบถามที่คุณเชื่อมโยงปลายทางข้อมูล ในสถานการณ์สมมตินี้ ชื่อของแบบสอบถามนั้นเป็น dimension_city คุณเห็นแอตทริบิวต์ระเบียนเหนือชื่อแบบสอบถามนี้:

[DataDestinations = {[Definition = [Kind = "Reference", QueryName = "dimension_city_DataDestination", IsNewTarget = true], Settings = [Kind = "Manual", AllowCreation = true, ColumnSettings = [Mappings = {[SourceColumnName = "CityKey", DestinationColumnName = "CityKey"], [SourceColumnName = "WWICityID", DestinationColumnName = "WWICityID"], [SourceColumnName = "City", DestinationColumnName = "City"], [SourceColumnName = "StateProvince", DestinationColumnName = "StateProvince"], [SourceColumnName = "Country", DestinationColumnName = "Country"], [SourceColumnName = "Continent", DestinationColumnName = "Continent"], [SourceColumnName = "SalesTerritory", DestinationColumnName = "SalesTerritory"], [SourceColumnName = "Region", DestinationColumnName = "Region"], [SourceColumnName = "Subregion", DestinationColumnName = "Subregion"], [SourceColumnName = "Location", DestinationColumnName = "Location"], [SourceColumnName = "LatestRecordedPopulation", DestinationColumnName = "LatestRecordedPopulation"]}], DynamicSchema = false, UpdateMethod = [Kind = "Replace"], TypeSettings = [Kind = "Table"]]]}]
shared dimension_city = let

ระเบียนแอตทริบิวต์นี้มีเขตข้อมูลที่มีชื่อ QueryName ซึ่งเก็บชื่อของแบบสอบถามที่มีตรรกะปลายทางข้อมูลทั้งหมดที่สัมพันธ์กับแบบสอบถามนี้ แบบสอบถามนี้มีลักษณะดังนี้:

shared dimension_city_DataDestination = let
  Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
  Navigation_1 = Pattern{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
  Navigation_2 = Navigation_1{[warehouseId = "527ba9c1-4077-433f-a491-9ef370e9230a"]}[Data],
  TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
  TableNavigation

คุณสังเกตเห็นว่า คล้ายกับสคริปต์ของต้นทางสําหรับ Lakehouse สคริปต์นี้สําหรับปลายทางมีรูปแบบที่คล้ายกันซึ่งฮาร์ดโค้ด workspaceid ที่ต้องใช้และ warehouseId ด้วย แทนที่ค่าคงที่เหล่านั้นด้วยตัวระบุของแบบสอบถามที่คุณสร้างขึ้น และสคริปต์ของคุณจะมีลักษณะดังนี้:

shared dimension_city_DataDestination = let
  Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
  Navigation_1 = Pattern{[workspaceId = WorkspaceId]}[Data],
  Navigation_2 = Navigation_1{[warehouseId = WarehouseId]}[Data],
  TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
  TableNavigation

ขณะนี้คุณสามารถยอมรับการเปลี่ยนแปลงนี้และอัปเดตกระแสข้อมูลของคุณโดยใช้การเปลี่ยนแปลงจากกระแสข้อมูลของคุณผ่านคุณลักษณะการควบคุมแหล่งที่มาในพื้นที่ทํางานของคุณ

ตอนนี้คุณสามารถเรียกใช้กระแสข้อมูลของคุณ ซึ่งใช้ค่าจากไลบรารีตัวแปร