ตัวอย่างการพับคิวรี

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

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

ลองนึกถึงสถานการณ์ที่ใช้ฐานข้อมูล Wide World Importers สําหรับฐานข้อมูล Azure Synapse Analytics SQL คุณได้รับมอบหมายให้สร้างคิวรีในPower Queryที่เชื่อมต่อกับfact_Saleตาราง และดึงข้อมูลยอดขาย 10 รายการล่าสุดที่มีเฉพาะเขตข้อมูลต่อไปนี้:

  • คีย์การขาย
  • คีย์ลูกค้า
  • คีย์วันที่ในใบแจ้งหนี้
  • คำอธิบาย
  • ปริมาณ

หมายเหตุ

สําหรับวัตถุประสงค์ในการสาธิต บทความนี้ใช้ฐานข้อมูลที่แสดงในบทช่วยสอนเกี่ยวกับการโหลดฐานข้อมูล Wide World Importers ลงใน Azure Synapse Analytics ความแตกต่างหลักในบทความนี้คือ fact_Sale ตารางเก็บข้อมูลสําหรับปี 2000 เท่านั้น โดยมีทั้งหมด 3,644,356 แถว

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

ตารางผลลัพธ์ตัวอย่างที่ได้มาจากตารางfact_Saleของฐานข้อมูล Azure Synapse Analytics ผู้นําเข้าในโลกกว้าง

บทความนี้แสดงสามวิธีเพื่อให้ได้ผลลัพธ์เดียวกันโดยมีระดับที่แตกต่างกันของการพับคิวรี:

  • ไม่มีการพับคิวรี
  • การพับคิวรีบางส่วน
  • การพับคิวรีแบบเต็มรูปแบบ

ไม่มีตัวอย่างการพับคิวรี

ข้อสำคัญ

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

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

เก็บการแปลงแถวด้านล่างที่พบภายในกลุ่ม ลดแถว ของแท็บ หน้าแรก

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

ป้อนค่า 10 ภายในกล่องโต้ตอบเก็บแถวด้านล่าง

เคล็ดลับ

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

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

การเลือกการแปลงเลือกคอลัมน์สําหรับตัวอย่างไม่มี Query Folding

สุดท้าย ในกล่องโต้ตอบ เลือกคอลัมน์ ให้เลือกSale KeyCustomer KeyInvoice Date Keyคอลัมน์ , Description, และ Quantity จากนั้นเลือก ตกลง

การเลือกคอลัมน์ Sale Key, Customer Key, Invoice Date Key, Description และ Quantity สําหรับตัวอย่างไม่มี Query Folding

ตัวอย่างโค้ดต่อไปนี้เป็นสคริปต์ M แบบเต็มสําหรับคิวรีที่คุณสร้างขึ้น:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Kept bottom rows" = Table.LastN(Navigation, 10),
  #"Choose columns" = Table.SelectColumns(#"Kept bottom rows", {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"})
in
  #"Choose columns""

ไม่มีการพับคิวรี: การทําความเข้าใจการประเมินคิวรี

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

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

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

แผนคิวรีสําหรับคิวรีที่สร้างขึ้นที่มีหลายโหนด โดยสองรายการอยู่ในสี่เหลี่ยมผืนผ้าที่แสดงถึงโหนดที่จะถูกประเมินโดยกลไกจัดการPower Query

แต่ละกล่องในรูปภาพก่อนหน้าจะเรียกว่าโหนด โหนดแสดงการแบ่งย่อยการดําเนินการเพื่อเติมเต็มคิวรีนี้ โหนดที่แสดงถึงแหล่งข้อมูล เช่น SQL Server ในตัวอย่างด้านบนและValue.NativeQueryโหนด แสดงว่าส่วนใดของคิวรีถูกโหลดไปยังแหล่งข้อมูล ส่วนที่เหลือของโหนดในกรณีนี้Table.LastNและTable.SelectColumnsเน้นในสี่เหลี่ยมผืนผ้าในภาพก่อนหน้าจะได้รับการประเมินโดยกลไกจัดการPower Query สองโหนดนี้แสดงการแปลงสองรายการที่คุณเพิ่ม โดยเก็บแถวล่างสุดและเลือกคอลัมน์ ส่วนที่เหลือของโหนดแสดงถึงการดําเนินการที่เกิดขึ้นในระดับแหล่งข้อมูลของคุณ

เมื่อต้องการดูคําขอที่แน่นอนที่ส่งไปยังแหล่งข้อมูลของคุณ เลือก ดูรายละเอียด ใน Value.NativeQuery โหนด

คําสั่ง SQL พบภายใน Value.NativeQuery ที่แสดงถึงคําขอของเขตข้อมูลและเรกคอร์ดทั้งหมดจากตารางfact_Saleในฐานข้อมูล

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

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

  • Sql.Database: โหนดนี้แสดงการเข้าถึงแหล่งข้อมูล เชื่อมต่อไปยังฐานข้อมูลและส่งคําขอเมตาดาต้าเพื่อทําความเข้าใจความสามารถของฐานข้อมูล
  • Value.NativeQuery: แสดงคําขอที่สร้างขึ้นโดยPower Query เพื่อเติมเต็มคิวรี Power Queryส่งคําขอข้อมูลในคําสั่ง SQL ดั้งเดิมไปยังแหล่งข้อมูล ในกรณีนี้ ซึ่งแสดงถึงเรกคอร์ดและเขตข้อมูลทั้งหมด (คอลัมน์) จาก fact_Sale ตาราง สําหรับสถานการณ์นี้ กรณีนี้ไม่เป็นที่พึงปรารถนา เนื่องจากตารางประกอบด้วยแถวนับล้านแถว และความสนใจจะอยู่ในช่วง 10 วันที่ผ่านมาเท่านั้น
  • Table.LastN: เมื่อPower Queryได้รับระเบียนทั้งหมดจากfact_Saleตาราง แล้ว จะใช้กลไกจัดการPower Queryเพื่อกรองตารางและเก็บเฉพาะ 10 แถวล่าสุดเท่านั้น
  • Table.SelectColumns: Power Queryจะใช้ผลลัพธ์ของTable.LastNโหนดและใช้การแปลงใหม่ที่เรียกว่า Table.SelectColumnsซึ่งเลือกคอลัมน์เฉพาะที่คุณต้องการเก็บไว้จากตาราง

สําหรับการประเมิน คิวรีนี้ต้องดาวน์โหลดแถวและเขตข้อมูลทั้งหมดจาก fact_Sale ตาราง คิวรีนี้ใช้เวลาเฉลี่ย 6 นาทีและ 1 วินาทีในการประมวลผลในอินสแตนซ์มาตรฐานของกระแสข้อมูล Power BI (ซึ่งเป็นบัญชีสําหรับการประเมินและการโหลดข้อมูลไปยังกระแสข้อมูล)

ตัวอย่างการพับคิวรีบางส่วน

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

การเลือกการแปลงเลือกคอลัมน์สําหรับตัวอย่างการพับคิวรีบางส่วน

ภายในกล่องโต้ตอบ เลือกคอลัมน์ ให้เลือกSale KeyCustomer KeyInvoice Date Keyคอลัมน์ , , Descriptionและ Quantity จากนั้นเลือก ตกลง

การเลือกคอลัมน์ Sale Key, Customer Key, Invoice Date Key, Description และ Quantity สําหรับตัวอย่างการพับคิวรีบางส่วน

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

เรียงลําดับเขตข้อมูล Sale Key ของตารางจากน้อยไปหามากโดยใช้เมนูบริบทของเขตข้อมูลตัวกรองอัตโนมัติ

ถัดไป เลือกเมนูบริบทตารางและเลือกแปลงเก็บแถวด้านล่าง

เลือกตัวเลือก เก็บแถวด้านล่าง ภายในเมนูบริบทของตาราง

ใน เก็บแถวด้านล่าง ให้ใส่ค่า 10 จากนั้นเลือก ตกลง

เก็บกล่องโต้ตอบแถวล่างสุดไว้โดยใส่ค่า 10 เป็นค่าอินพุตเพื่อให้เก็บเฉพาะสิบแถวล่างสุดของตารางเท่านั้น

ตัวอย่างโค้ดต่อไปนี้เป็นสคริปต์ M แบบเต็มสําหรับคิวรีที่คุณสร้างขึ้น:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Choose columns" = Table.SelectColumns(Navigation, {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}),
  #"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Ascending}}),
  #"Kept bottom rows" = Table.LastN(#"Sorted rows", 10)
in
  #"Kept bottom rows"

ตัวอย่างการพับคิวรีบางส่วน: การทําความเข้าใจการประเมินคิวรี

ตรวจสอบบานหน้าต่างขั้นตอนที่ใช้ คุณสังเกตเห็นว่าตัวบ่งชี้การพับคิวรีกําลังแสดงว่าการแปลงล่าสุดที่คุณเพิ่ม Kept bottom rowsมีการทําเครื่องหมายเป็นขั้นตอนที่จะได้รับการประเมินภายนอกแหล่งข้อมูล หรือกล่าวอีกนัยหนึ่งคือ โดยกลไกPower Query

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

คุณสามารถคลิกขวาที่ขั้นตอนสุดท้ายของคิวรีที่ชื่อ Kept bottom rowsว่า และเลือกตัวเลือก แผนคิวรี เพื่อทําความเข้าใจวิธีการประเมินคิวรีของคุณได้ดียิ่งขึ้น

แผนคิวรีที่แสดงหลายโหนดที่โหนด Table.LastN ที่แสดงภายในสี่เหลี่ยมผืนผ้า เป็นโหนดที่จะถูกประเมินโดยกลไกจัดการPower Queryและไม่ใช่โดยแหล่งข้อมูล

แต่ละกล่องในรูปภาพก่อนหน้าจะเรียกว่าโหนด โหนดแสดงถึงทุกกระบวนการที่ต้องเกิดขึ้น (จากซ้ายไปขวา) เพื่อให้คิวรีของคุณได้รับการประเมิน โหนดเหล่านี้บางส่วนสามารถประเมินได้ที่แหล่งข้อมูลของคุณในขณะที่แหล่งข้อมูลอื่น เช่น โหนดสําหรับ Table.LastNที่แสดงโดยขั้นตอน แถวด้านล่างที่ Kept จะถูกประเมินโดยใช้กลไกจัดการPower Query

เมื่อต้องการดูคําขอที่แน่นอนที่ส่งไปยังแหล่งข้อมูลของคุณ เลือก ดูรายละเอียด ใน Value.NativeQuery โหนด

คําสั่ง SQL ภายใน Value.NativeQuery ที่แสดงการร้องขอระเบียนทั้งหมด โดยมีเฉพาะเขตข้อมูลที่ร้องขอจากตารางfact_Salesในฐานข้อมูลที่เรียงลําดับจากน้อยไปหามากตามเขตข้อมูล Sales Key

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

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

  • Sql.Database: เชื่อมต่อกับฐานข้อมูล และส่งคําขอเมตาดาต้าเพื่อทําความเข้าใจความสามารถของฐานข้อมูล
  • Value.NativeQuery: แสดงคําขอที่สร้างขึ้นโดยPower Query เพื่อเติมเต็มคิวรี Power Queryส่งคําขอข้อมูลในคําสั่ง SQL ดั้งเดิมไปยังแหล่งข้อมูล สําหรับกรณีนี้ ซึ่งแสดงถึงระเบียนทั้งหมด โดยมีเพียงเขตข้อมูลที่ร้องขอจาก fact_Sale ตารางในฐานข้อมูลที่เรียงลําดับจากน้อยไปหามากตาม Sales Key เขตข้อมูลนั้น
  • Table.LastN: เมื่อPower Queryได้รับระเบียนทั้งหมดจากfact_Saleตารางแล้ว จะใช้กลไกจัดการPower Queryเพื่อกรองตารางและเก็บเฉพาะ 10 แถวล่าสุดเท่านั้น

สําหรับการประเมิน คิวรีนี้ต้องดาวน์โหลดแถวทั้งหมดและเฉพาะเขตข้อมูลที่จําเป็นจาก fact_Sale ตารางเท่านั้น ใช้เวลาเฉลี่ย 3 นาทีและ 4 วินาทีในการประมวลผลตัวอย่างมาตรฐานของกระแสข้อมูล Power BI (ซึ่งบัญชีสําหรับการประเมินและการโหลดข้อมูลไปยังกระแสข้อมูล)

ตัวอย่างการพับคิวรีแบบเต็ม

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

การเลือกการแปลงเลือกคอลัมน์สําหรับตัวอย่างการพับคิวรีแบบเต็ม

ใน เลือกคอลัมน์ เลือกSale KeyCustomer Keyคอลัมน์ , Invoice Date Key, Description, และ Quantity จากนั้นเลือก ตกลง

การเลือกคอลัมน์ Sale Key, คีย์ลูกค้า, คีย์วันที่ออกใบแจ้งหนี้, คําอธิบาย และ ปริมาณ สําหรับตัวอย่างการพับคิวรีเต็มรูปแบบ

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

เรียงลําดับเขตข้อมูล Sale Key ของตารางจากมากไปน้อยโดยใช้เมนูบริบท

ถัดไป ให้เลือกเมนูบริบทตารางและเลือกคงการแปลงแถวบนสุดไว้

เก็บตัวเลือกแถวบนสุดไว้ภายในเมนูบริบทของตาราง

ใน เก็บแถวบนสุด ให้ใส่ค่า 10 จากนั้นเลือก ตกลง

เก็บกล่องโต้ตอบแถวบนสุดที่มีค่าของสิบแถวที่ป้อนเข้าไปเป็นค่าอินพุตเพื่อเก็บเฉพาะสิบแถวบนสุดของตาราง

ตัวอย่างโค้ดต่อไปนี้คือสคริปต์ M แบบเต็มสําหรับคิวรีที่คุณสร้างขึ้น:

let
  Source = Sql.Database(ServerName, DatabaseName),
  Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
  #"Choose columns" = Table.SelectColumns(Navigation, {"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}),
  #"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Descending}}),
  #"Kept top rows" = Table.FirstN(#"Sorted rows", 10)
in
  #"Kept top rows"

ตัวอย่างการพับคิวรีแบบเต็ม: การทําความเข้าใจการประเมินคิวรี

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

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

คุณสามารถคลิกขวาที่ขั้นตอนสุดท้ายของคิวรีของคุณ แถวที่ชื่อว่าเก็บแถวบนสุดไว้และเลือกตัวเลือกที่อ่านแผนคิวรี

คําสั่ง SQL ที่พบภายใน Value.NativeQuery ที่แสดงถึงคําขอบันทึกสิบรายการสูงสุดของตารางfact_Saleที่เรียงลําดับโดยใช้เขตข้อมูลคีย์การขายและที่มีเฉพาะเขตข้อมูล Sale Key, Customer Key, Invoice Date Key, Description และ Quantity

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

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

  • Sql.Database: เชื่อมต่อกับฐานข้อมูลและส่งคําขอเมตาดาต้าเพื่อทําความเข้าใจความสามารถของฐานข้อมูล
  • Value.NativeQuery: แสดงคําขอที่สร้างขึ้นโดยPower Queryเพื่อเติมเต็มคิวรี Power Queryส่งคําขอข้อมูลในคําสั่ง SQL แบบเนทีฟไปยังแหล่งข้อมูล สําหรับกรณีนี้ ซึ่งแสดงการร้องขอเฉพาะระเบียน 10 อันดับแรกของ fact_Sale ตาราง โดยมีเพียงเขตข้อมูลที่จําเป็นเท่านั้นหลังจากเรียงลําดับจากมากไปหาน้อยโดยใช้ Sale Key เขตข้อมูล

หมายเหตุ

ในขณะที่ไม่มีส่วนคําสั่งที่สามารถใช้เพื่อเลือกแถวล่างสุดของตารางในภาษา T-SQL จะมีส่วนคําสั่ง TOP ที่ดึงแถวบนสุดของตาราง

สําหรับการประเมิน คิวรีนี้จะดาวน์โหลดเฉพาะ 10 แถวโดยมีเฉพาะเขตข้อมูลที่คุณร้องขอจาก fact_Sale ตารางเท่านั้น คิวรีนี้ใช้เวลาเฉลี่ย 31 วินาทีในการประมวลผลในอินสแตนซ์มาตรฐานของกระแสข้อมูล Power BI (ซึ่งเป็นบัญชีสําหรับการประเมินและการโหลดข้อมูลไปยังกระแสข้อมูล)

การเปรียบเทียบประสิทธิภาพการทํางาน

เพื่อให้เข้าใจถึงผลกระทบของ Query Folding ในคิวรีเหล่านี้ได้ดียิ่งขึ้น คุณสามารถรีเฟรชคิวรีของคุณ บันทึกเวลาที่ใช้ในการรีเฟรชคิวรีแต่ละรายการได้อย่างเต็มที่ และเปรียบเทียบคิวรีเหล่านั้น เพื่อความง่าย บทความนี้ให้ช่วงเวลาการรีเฟรชโดยเฉลี่ยที่จับภาพไว้โดยใช้กลไกการรีเฟรชกระแสข้อมูล Power BI ในขณะที่เชื่อมต่อกับสภาพแวดล้อม Azure Synapse Analytics เฉพาะกับ DW2000c เป็นระดับบริการ

เวลาการรีเฟรชสําหรับแต่ละคิวรีมีดังนี้:

ตัวอย่าง ป้ายกำกับ เวลาเป็นวินาที
ไม่มีการพับคิวรี ไม่มี 361
การพับคิวรีบางส่วน บางส่วน 184
การพับคิวรีแบบเต็ม แบบเต็ม 31

แผนภูมิที่เปรียบเทียบเวลาการรีเฟรชของคิวรีที่ไม่มีคิวรีแบบพับที่มี 361 วินาที คิวรีบางส่วนจะถูกพับด้วย 184 วินาที และคิวรีที่ถูกพับอย่างเต็มรูปแบบด้วย 31 วินาที

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

  • ข้อมูลในการส่งต่อ
  • การแปลงที่ดําเนินการโดยกลไกจัดการPower Query

ส่วนต่อไปนี้อธิบายผลกระทบที่กระบวนการทั้งสองนี้มีในคิวรีที่กล่าวถึงก่อนหน้านี้

ข้อมูลในการส่งต่อ

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

ตารางต่อไปนี้แสดงรายการของจํานวนแถวที่ fact_Sale ร้องขอจากตารางของฐานข้อมูล ตารางยังรวมถึงคําอธิบายโดยย่อของคําสั่ง SQL ที่ส่งเพื่อร้องขอข้อมูลดังกล่าวจากแหล่งข้อมูล

ตัวอย่าง ป้ายกำกับ แถวที่ร้องขอ คำอธิบาย
ไม่มีการพับคิวรี ไม่มี 3644356 ร้องขอสําหรับเขตข้อมูลทั้งหมดและระเบียนทั้งหมดจาก fact_Sale ตาราง
การพับคิวรีบางส่วน บางส่วน 3644356 ร้องขอสําหรับทุกระเบียน แต่จําเป็นต้องมีเขตข้อมูลจาก fact_Sale ตารางหลังจากที่เรียงลําดับตาม Sale Key เขตข้อมูลแล้วเท่านั้น
การพับคิวรีแบบเต็ม แบบเต็ม 10 คําขอสําหรับเฉพาะเขตข้อมูลที่จําเป็นและระเบียน TOP 10 ของ fact_Sale ตารางหลังจากเรียงลําดับจากมากไปหาน้อยตาม Sale Key เขตข้อมูล

แผนภูมิที่มีจํานวนแถวที่รวบรวมจากฐานข้อมูลโดยไม่มีการพับคิวรี การพับคิวรีบางส่วน และการพับคิวรีเต็มรูปแบบ

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

สําหรับตัวอย่างที่แสดงนั้น Power Queryต้องร้องขอแถวมากกว่า 3.6 ล้านแถวจากแหล่งข้อมูลสําหรับการไม่มี Query Folding และตัวอย่างการพับคิวรีบางส่วน สําหรับตัวอย่างการพับคิวรีแบบเต็ม ระบบร้องขอเฉพาะ 10 แถวเท่านั้น สําหรับเขตข้อมูลที่ร้องขอ ตัวอย่าง Query Folding ไม่ได้ร้องขอเขตข้อมูลที่พร้อมใช้งานทั้งหมดจากตาราง ทั้งการพับคิวรีบางส่วนและตัวอย่างการพับคิวรีแบบเต็มส่งคําขอสําหรับเขตข้อมูลที่จําเป็นเท่านั้น

ข้อควรระวัง

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

การแปลงที่ดําเนินการโดยกลไกจัดการPower Query

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

ตารางต่อไปนี้แสดงโหนดจากแผนคิวรีของคิวรีก่อนหน้าที่จะได้รับการประเมินโดยกลไกจัดการPower Query

ตัวอย่าง ป้ายกำกับ โหนดการแปลงกลไกจัดการPower Query
ไม่มีการพับคิวรี ไม่มี Table.LastN, Table.SelectColumns
การพับคิวรีบางส่วน บางส่วน Table.LastN
การพับคิวรีแบบเต็ม แบบเต็ม

แผนภูมิที่มีการแปลงทั้งหมดทํางานโดยกลไกPower Queryโดยไม่มีการพับคิวรี การพับคิวรีบางส่วน และการพับคิวรีเต็มรูปแบบ

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

การแปลงสามารถถูกจัดกลุ่มเป็นประเภทดังต่อไปนี้:

ชนิดของตัวดําเนินการ คำอธิบาย
ระยะ ไกล ตัวดําเนินการที่เป็นโหนดแหล่งข้อมูล การประเมินของตัวดําเนินการเหล่านี้เกิดขึ้นภายนอกPower Query
การสตรีม ตัวดําเนินการเป็นตัวดําเนินการแบบพาส-ทรู ตัวอย่างเช่น Table.SelectRows ด้วยตัวกรองอย่างง่ายมักจะสามารถกรองผลลัพธ์ได้เมื่อผ่านตัวดําเนินการ และไม่จําเป็นต้องรวบรวมแถวทั้งหมดก่อนที่จะย้ายข้อมูล Table.SelectColumns และ Table.ReorderColumns เป็นตัวอย่างอื่น ๆ ของการเรียงลําดับของตัวดําเนินการเหล่านี้
การสแกนแบบเต็ม ตัวดําเนินการที่จําเป็นต้องรวบรวมแถวทั้งหมดก่อนที่ข้อมูลสามารถย้ายไปยังตัวดําเนินการถัดไปในห่วงโซ่ ตัวอย่างเช่น หากต้องการเรียงลําดับข้อมูล Power Queryจําเป็นต้องรวบรวมข้อมูลทั้งหมด ตัวอย่างอื่น ๆ ของตัวดําเนินการสแกนแบบเต็มคือ Table.Group, Table.NestedJoinและTable.Pivot

เคล็ดลับ

แม้ว่าการแปลงทุกครั้งจะเหมือนกันจากมุมมองด้านประสิทธิภาพ แต่ในกรณีส่วนใหญ่การมีการแปลงน้อยลงมักจะดีกว่า

ข้อควรพิจารณาและคําแนะนํา

  • ทําตามแนวทางปฏิบัติที่ดีที่สุดเมื่อสร้างคิวรีใหม่ ตามที่ระบุไว้ใน แนวทางปฏิบัติที่ดีที่สุดในPower Query
  • ใช้ ตัวบ่งชี้การพับคิวรี เพื่อตรวจสอบว่าขั้นตอนใดที่ทําให้คิวรีของคุณไม่สามารถพับได้ จัดลําดับใหม่หากจําเป็นที่จะเพิ่มการพับ
  • ใช้แผนคิวรีเพื่อกําหนดว่าการแปลงใดกําลังเกิดขึ้นที่กลไกจัดการPower Queryสําหรับขั้นตอนเฉพาะ พิจารณาปรับเปลี่ยนคิวรีที่มีอยู่โดยจัดเรียงขั้นตอนของคุณใหม่ จากนั้นตรวจสอบแผนคิวรีของขั้นตอนสุดท้ายของคิวรีคุณอีกครั้ง และดูว่าแผนคิวรีดูดีกว่าแผนก่อนหน้าหรือไม่ ตัวอย่างเช่น แผนคิวรีใหม่มีโหนดน้อยกว่าแผนก่อนหน้า และโหนดส่วนใหญ่เป็นโหนด "Streaming" และไม่ใช่ "การสแกนแบบเต็ม" สําหรับแหล่งข้อมูลที่สนับสนุนการพับ โหนดใด ๆ ในแผนคิวรีอื่นนอกเหนือจาก Value.NativeQuery และโหนดการเข้าถึงแหล่งข้อมูลแสดงการแปลงที่ไม่ได้พับ
  • เมื่อพร้อมใช้งาน คุณสามารถใช้ตัวเลือก ดูคิวรีในระบบของฐานข้อมูล (หรือ ดูคิวรีแหล่งข้อมูล) เพื่อให้แน่ใจว่าคิวรีของคุณสามารถพับกลับไปยังแหล่งข้อมูลได้ หากตัวเลือกนี้ถูกปิดใช้งานสําหรับขั้นตอนของคุณ และคุณกําลังใช้แหล่งข้อมูลที่เปิดใช้งานตามปกติ คุณได้สร้างขั้นตอนที่หยุดการพับคิวรี ถ้าคุณกําลังใช้แหล่งข้อมูลที่ไม่รองรับตัวเลือกนี้ คุณสามารถพึ่งพาตัวบ่งชี้การพับคิวรีและแผนคิวรีได้
  • ใช้เครื่องมือการวินิจฉัยคิวรีเพื่อทําความเข้าใจคําขอที่ถูกส่งไปยังแหล่งข้อมูลของคุณได้ดียิ่งขึ้นเมื่อสามารถทําการพับคิวรีสําหรับตัวเชื่อมต่อได้
  • เมื่อรวมข้อมูลที่มาจากการใช้ตัวเชื่อมต่อหลายตัว Power Queryพยายามส่งงานให้มากที่สุดเท่าที่จะทําได้กับแหล่งข้อมูลทั้งสองแหล่ง ในขณะที่สอดคล้องกับระดับความเป็นส่วนตัวที่กําหนดไว้สําหรับแต่ละแหล่งข้อมูล
  • อ่านบทความ ในระดับความเป็นส่วนตัว เพื่อปกป้องคิวรีของคุณจากการเรียกใช้กับข้อผิดพลาดของไฟร์วอลล์ความเป็นส่วนตัวของข้อมูล
  • ใช้เครื่องมืออื่นเพื่อตรวจสอบการพับคิวรีจากมุมมองของคําขอที่ได้รับโดยแหล่งข้อมูล จากตัวอย่างในบทความนี้ คุณสามารถใช้ Microsoft SQL Server Profiler เพื่อตรวจสอบคําขอที่ส่งโดยPower Queryและได้รับโดย Microsoft SQL Server
  • ถ้าคุณเพิ่มขั้นตอนใหม่ลงในคิวรีแบบพับอย่างสมบูรณ์และขั้นตอนใหม่นี้ก็ถูกพับด้วย Power Queryอาจส่งคําขอใหม่ไปยังแหล่งข้อมูลแทนการใช้ผลลัพธ์ก่อนหน้าเวอร์ชันที่แคชไว้ ในทางปฏิบัติ กระบวนการนี้อาจส่งผลให้การดําเนินการเป็นเรื่องง่ายในข้อมูลปริมาณน้อยที่ใช้เวลานานในการรีเฟรชในการแสดงตัวอย่างมากกว่าที่คาดไว้ การรีเฟรชที่ยาวขึ้นนี้เกิดขึ้นเนื่องจากPower Queryการร้องขอแหล่งข้อมูลแทนที่จะทํางานจากสําเนาข้อมูลในเครื่อง