การรีเฟรชแบบเพิ่มหน่วยขั้นสูงและข้อมูลแบบเรียลไทม์ที่มีตําแหน่งข้อมูล XMLA

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

พาร์ติชัน

พาร์ติชันตารางแบบจําลองเชิงความหมายจะไม่สามารถมองเห็นได้และไม่สามารถจัดการโดยใช้ Power BI Desktop หรือบริการของ Power BI ได้ สําหรับแบบจําลองในพื้นที่ทํางานที่กําหนดให้กับความจุแบบพรีเมียม คุณสามารถจัดการพาร์ติชันผ่านตําแหน่งข้อมูล XMLA ได้โดยใช้เครื่องมือเช่น SQL Server Management Studio (SSMS) ตัวแก้ไขตารางโอเพนซอร์สที่เขียนสคริปต์ด้วย Tabular Model Scripting Language (TMSL) และเขียนโปรแกรมด้วยแบบจําลองออบเจ็กต์ตาราง (TOM)

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

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

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

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

ตัวอย่างเช่น ถ้าวันที่ของวันนี้คือ 2 กุมภาพันธ์ 2021 และตาราง FactInternetSales ของเราที่แหล่งข้อมูลประกอบด้วยแถวตั้งแต่วันนี้ หากนโยบายของเราระบุให้รวมการเปลี่ยนแปลงแบบเรียลไทม์ รีเฟรชแถวในหนึ่งวันสุดท้ายของช่วงเวลาการรีเฟรช และจัดเก็บแถวในรอบระยะเวลาในสามปีที่ผ่านมา จากนั้นด้วยการดําเนินการรีเฟรชครั้งแรก พาร์ติชัน DirectQuery จะถูกสร้างขึ้นสําหรับการเปลี่ยนแปลงในอนาคต จะมีการสร้างพาร์ติชันนําเข้าใหม่สําหรับแถวของวันนี้ พาร์ติชันในอดีตจะถูกสร้างขึ้นสําหรับเมื่อวานเป็นระยะเวลาทั้งวันในวันที่ 1 กุมภาพันธ์ 2021 พาร์ติชันในอดีตจะถูกสร้างขึ้นสําหรับช่วงทั้งเดือนก่อนหน้า (มกราคม 2021) พาร์ติชันในอดีตจะถูกสร้างขึ้นสําหรับช่วงทั้งปีก่อนหน้า (2020) และพาร์ติชันอดีตสําหรับช่วงทั้งปี 2019 และ 2018 จะถูกสร้างขึ้น ไม่มีการสร้างพาร์ติชันไตรมาสทั้งหมดเนื่องจากเรายังไม่ได้เสร็จสิ้นไตรมาสแรกของปี 2021

Diagram shows the partition naming granularity described in the text.

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

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

แบบจําลองจะเก็บพาร์ติชันสําหรับระยะเวลาร้านค้าในอดีตทั้งหมดรวมถึงพาร์ติชันช่วงเวลาทั้งหมดตลอดระยะเวลาการรีเฟรชปัจจุบัน ในตัวอย่างข้อมูลย้อนหลังสามปีเต็มจะถูกเก็บไว้ในพาร์ติชันสําหรับช่วงเวลาเดือน 2018, 2019, 2020 และพาร์ติชันสําหรับช่วงเวลา 2021Q101 เดือนช่วงเวลา 2021Q10201 วันและพาร์ติชันช่วงเวลาการรีเฟรชวันปัจจุบัน เนื่องจากตัวอย่างเก็บข้อมูลในอดีตเป็นเวลาสาม ปี พาร์ติชันปี 2018 จะถูกเก็บไว้จนกว่าจะมีการรีเฟรชครั้งแรกในวันที่ 1 มกราคม 2022

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

การจัดการการรีเฟรชด้วย SQL Server Management Studio

SQL Server Management Studio (SSMS) สามารถใช้เพื่อดูและจัดการพาร์ติชันที่สร้างขึ้นโดยแอปพลิเคชันของนโยบายการรีเฟรชแบบเพิ่มหน่วย โดยใช้ SSMS คุณสามารถ ตัวอย่างเช่น รีเฟรชพาร์ติชันย้อนหลังที่ไม่ได้อยู่ในระยะเวลาการรีเฟรชแบบเพิ่มหน่วยเพื่อดําเนินการอัปเดตย้อนหลังโดยไม่ต้องรีเฟรชข้อมูลประวัติทั้งหมด นอกจากนี้ยังสามารถใช้ SSMS ได้เมื่อทําการบูทสเตรปเพื่อโหลดข้อมูลในอดีตสําหรับแบบจําลองขนาดใหญ่โดยการเพิ่ม/รีเฟรชพาร์ติชันในอดีตแบบเพิ่มหน่วยในชุดงาน

Screenshot shows the Partitions window in SSMS.

แทนที่การทํางานการรีเฟรชแบบเพิ่มหน่วย

ด้วย SSMS คุณยังสามารถควบคุมวิธีการเรียกการรีเฟรชโดยใช้ Tabular Model Scripting Language และ Tabular Object Model ได้มากขึ้น ตัวอย่างเช่น ใน SSMS ใน Object Explorer ให้คลิกขวาที่ตารางจากนั้น เลือกตัวเลือกเมนู ตาราง กระบวนการ จากนั้นเลือก ปุ่ม สคริปต์ เพื่อสร้างคําสั่งรีเฟรช TMSL

Screenshot shows the Script button in Process Table dialog.

คุณสามารถใช้พารามิเตอร์เหล่านี้กับคําสั่งรีเฟรช TMSL เพื่อแทนที่การรีเฟรชแบบเพิ่มหน่วยเริ่มต้นได้:

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

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

{ 
  "refresh": {
    "type": "full",

    "applyRefreshPolicy": true,
    "effectiveDate": "12/31/2013",

    "objects": [
      {
        "database": "IR_AdventureWorks", 
        "table": "FactInternetSales" 
      }
    ]
  }
}

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการแทนที่การรีเฟรชแบบเพิ่มหน่วยตามค่าเริ่มต้นด้วย TMSL โปรดดู คําสั่งรีเฟรช

ตรวจสอบให้แน่ใจว่ามีประสิทธิภาพสูงสุด

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

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

ป้องกันการหมดเวลาในการรีเฟรชแบบเต็มเริ่มต้น

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

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

นํานโยบายการรีเฟรชไปใช้

เครื่องมือ Open-source Tabular Editor 2 มีวิธีง่าย ๆ ในการบูทสเตรปการดําเนินการรีเฟรชเริ่มต้น หลังจากเผยแพร่แบบจําลองที่มีนโยบายการรีเฟรชแบบเพิ่มหน่วยที่กําหนดจาก Power BI Desktop ไปยังบริการ ให้เชื่อมต่อกับแบบจําลองโดยใช้ตําแหน่งข้อมูล XMLA ในโหมดอ่าน/เขียน เรียกใช้ นํานโยบาย การรีเฟรชไปใช้กับตารางการรีเฟรชแบบเพิ่มหน่วย ด้วยนโยบายที่ใช้เท่านั้น พาร์ติชันจะถูกสร้างขึ้นแต่ไม่มีข้อมูลถูกโหลดลงในพาร์ติชันเหล่านั้น จากนั้นเชื่อมต่อกับ SSMS เพื่อรีเฟรชพาร์ติชันตามลําดับหรือเป็นชุดเพื่อโหลดและประมวลผลข้อมูล สําหรับข้อมูลเพิ่มเติม โปรดดู การรีเฟรช แบบเพิ่มหน่วยในเอกสารประกอบตัวแก้ไขตาราง

Screenshot show the Tabular Editor with Apply Refresh Policy selected.

ตัวกรอง Power Query สําหรับพาร์ติชันว่าง

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

Screenshot shows the Power Query Editor with code that filters out the product key.

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

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

เคล็ดลับ

อย่าลืมดูวิดีโอ บล็อก และสิ่งอื่นๆ จากชุมชนผู้เชี่ยวชาญ BI ของ Power BI

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการประมวลผลตารางและพาร์ติชันจาก SSMS ให้ดู ฐานข้อมูลกระบวนการ ตาราง หรือพาร์ติชัน (Analysis Services) หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับแบบจําลองการประมวลผล ตาราง และพาร์ติชันโดยใช้ TMSL โปรดดู คําสั่งรีเฟรช (TMSL)

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

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

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

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

"refreshPolicy": {
    "policyType": "basic",
    "rollingWindowGranularity": "month",
    "rollingWindowPeriods": 120,
    "incrementalGranularity": "month",
    "incrementalPeriods": 120,
    "pollingExpression": "<M expression or name of custom polling query>",
    "sourceExpression": [
    "let ..."
    ]
}

เคล็ดลับ

อย่าลืมดูวิดีโอ บล็อก และสิ่งอื่นๆ จากชุมชนผู้เชี่ยวชาญ BI ของ Power BI

การปรับใช้เมตาดาต้าเท่านั้น

เมื่อเผยแพร่ไฟล์ .pbix เวอร์ชันใหม่จาก Power BI Desktop ไปยังพื้นที่ทํางาน ถ้ามีแบบจําลองที่มีชื่อเดียวกันอยู่แล้ว คุณจะได้รับการแจ้งเตือนให้แทนที่แบบจําลองที่มีอยู่

Screenshot shows the Replace model dialog.

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

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

สําหรับพื้นที่ทํางานที่กําหนดให้กับความจุแบบพรีเมียมที่กําหนดค่าสําหรับการอ่าน/เขียนตําแหน่งข้อมูล XMLA เครื่องมือที่เข้ากันได้จะเปิดใช้งานการปรับใช้เมตาดาต้าเท่านั้น ตัวอย่างเช่น ALM Toolkit เป็นเครื่องมือ diff แบบ schema สําหรับแบบจําลอง Power BI และสามารถใช้เพื่อดําเนินการปรับใช้เมตาดาต้าเท่านั้น

ดาวน์โหลดและติดตั้ง ALM Toolkit เวอร์ชันล่าสุดจาก Analysis Services Git repo คําแนะนําทีละขั้นตอนเกี่ยวกับการใช้ ALM Toolkit ไม่ได้รวมอยู่ในเอกสารประกอบของ Microsoft ลิงก์และข้อมูลของคู่มือ ALM Toolkit มีอยู่บนริบบอนความช่วยเหลือ หากต้องการดําเนินการปรับใช้เมตาดาต้าเท่านั้น ให้ทําการเปรียบเทียบและเลือกอินสแตนซ์ Power BI Desktop ที่กําลังทํางานเป็นแหล่งข้อมูล และแบบจําลองที่มีอยู่ในบริการของ Power BI เป็นเป้าหมาย พิจารณาความแตกต่างที่แสดงและข้ามการอัปเดตของตารางด้วยพาร์ติชันรีเฟรชแบบเพิ่มหน่วยหรือใช้ กล่องโต้ตอบตัวเลือก เพื่อเก็บพาร์ติชันสําหรับการอัปเดตตาราง ตรวจสอบการเลือกเพื่อให้แน่ใจว่ามีความสมบูรณ์ของแบบจําลองเป้าหมายจากนั้นจึงอัปเดต

Screenshot shows the ALM Toolkit window.

เพิ่มนโยบายการรีเฟรชแบบเพิ่มหน่วยและข้อมูลตามเวลาจริงทางโปรแกรม

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

หมายเหตุ

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

กระบวนการประกอบด้วยขั้นตอนต่อไปนี้:

  1. ตรวจสอบให้แน่ใจว่าแบบจําลองเป้าหมายมีระดับความเข้ากันได้ต่ําสุดที่จําเป็น ใน SSMS คลิกขวาที่ [ชื่อแบบจําลอง]>ระดับความเข้ากันได้ของคุณสมบัติ> หากต้องการเพิ่มระดับความเข้ากันได้ ให้ใช้สคริปต์ createOrReplace TMSL หรือตรวจสอบรหัสตัวอย่าง TOM ต่อไปนี้สําหรับตัวอย่าง

    a. Import policy - 1550
    b. Hybrid policy - 1565
    
  2. RangeStartเพิ่มพารามิเตอร์ และ RangeEnd ลงในนิพจน์แบบจําลอง หากจําเป็น ให้เพิ่มฟังก์ชันเพื่อแปลงค่าวันที่/เวลาเป็นคีย์วันที่

  3. RefreshPolicyกําหนดวัตถุด้วยการเก็บถาวรที่ต้องการ (หน้าต่างเลื่อน) และระยะเวลาการรีเฟรชแบบเพิ่มหน่วย รวมถึงนิพจน์แหล่งที่มาที่กรองตารางเป้าหมายตามRangeStartพารามิเตอร์ และRangeEnd ตั้งค่าโหมดนโยบายการรีเฟรชเป็น นําเข้า หรือ ไฮบริด โดยขึ้นอยู่กับข้อกําหนดของข้อมูลแบบเรียลไทม์ของคุณ การไฮบริดทําให้ Power BI เพิ่มพาร์ติชัน DirectQuery ลงในตารางเพื่อดึงข้อมูลการเปลี่ยนแปลงล่าสุดจากแหล่งข้อมูลที่เกิดขึ้นหลังจากเวลารีเฟรชครั้งล่าสุด

  4. เพิ่มนโยบายการรีเฟรชไปยังตารางและทําการรีเฟรชเต็มรูปแบบเพื่อให้ Power BI แบ่งพาร์ติชันตารางตามความต้องการของคุณ

ตัวอย่างโค้ดต่อไปนี้สาธิตวิธีการดําเนินการขั้นตอนก่อนหน้านี้โดยใช้ TOM หากคุณต้องการใช้ตัวอย่างนี้ตามที่เป็น คุณต้องมีสําเนาสําหรับฐานข้อมูล AdventureWorksDW และนําเข้า ตาราง FactInternetSales ลงในแบบจําลอง ตัวอย่างโค้ดจะถือว่า RangeStart พารามิเตอร์ และ RangeEnd และ DateKey ฟังก์ชันไม่มีอยู่ในแบบจําลอง เพียงแค่นําเข้า ตาราง FactInternetSales และเผยแพร่แบบจําลองไปยังพื้นที่ทํางานบน Power BI Premium จากนั้นอัปเดต workspaceUrl เพื่อให้ตัวอย่างโค้ดสามารถเชื่อมต่อกับแบบจําลองของคุณได้ อัปเดตบรรทัดรหัสเพิ่มเติมตามความจําเป็น

using System;
using TOM = Microsoft.AnalysisServices.Tabular;
namespace Hybrid_Tables
{
    class Program
    {
        static string workspaceUrl = "<Enter your Workspace URL here>";
        static string databaseName = "AdventureWorks";
        static string tableName = "FactInternetSales";
        static void Main(string[] args)
        {
            using (var server = new TOM.Server())
            {
                // Connect to the dataset.
                server.Connect(workspaceUrl);
                TOM.Database database = server.Databases.FindByName(databaseName);
                if (database == null)
                {
                    throw new ApplicationException("Database cannot be found!");
                }
                if(database.CompatibilityLevel < 1565)
                {
                    database.CompatibilityLevel = 1565;
                    database.Update();
                }
                TOM.Model model = database.Model;
                // Add RangeStart, RangeEnd, and DateKey function.
                model.Expressions.Add(new TOM.NamedExpression {
                    Name = "RangeStart",
                    Kind = TOM.ExpressionKind.M,
                    Expression = "#datetime(2021, 12, 30, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]"
                });
                model.Expressions.Add(new TOM.NamedExpression
                {
                    Name = "RangeEnd",
                    Kind = TOM.ExpressionKind.M,
                    Expression = "#datetime(2021, 12, 31, 0, 0, 0) meta [IsParameterQuery=true, Type=\"DateTime\", IsParameterQueryRequired=true]"
                });
                model.Expressions.Add(new TOM.NamedExpression
                {
                    Name = "DateKey",
                    Kind = TOM.ExpressionKind.M,
                    Expression =
                        "let\n" +
                        "    Source = (x as datetime) => Date.Year(x)*10000 + Date.Month(x)*100 + Date.Day(x)\n" +
                        "in\n" +
                        "    Source"
                });
                // Apply a RefreshPolicy with Real-Time to the target table.
                TOM.Table salesTable = model.Tables[tableName];
                TOM.RefreshPolicy hybridPolicy = new TOM.BasicRefreshPolicy
                {
                    Mode = TOM.RefreshPolicyMode.Hybrid,
                    IncrementalPeriodsOffset = -1,
                    RollingWindowPeriods = 1,
                    RollingWindowGranularity = TOM.RefreshGranularityType.Year,
                    IncrementalPeriods = 1,
                    IncrementalGranularity = TOM.RefreshGranularityType.Day,
                    SourceExpression =
                        "let\n" +
                        "    Source = Sql.Database(\"demopm.database.windows.net\", \"AdventureWorksDW\"),\n" +
                        "    dbo_FactInternetSales = Source{[Schema=\"dbo\",Item=\"FactInternetSales\"]}[Data],\n" +
                        "    #\"Filtered Rows\" = Table.SelectRows(dbo_FactInternetSales, each [OrderDateKey] >= DateKey(RangeStart) and [OrderDateKey] < DateKey(RangeEnd))\n" +
                        "in\n" +
                        "    #\"Filtered Rows\""
                };
                salesTable.RefreshPolicy = hybridPolicy;
                model.RequestRefresh(TOM.RefreshType.Full);
                model.SaveChanges();
            }
            Console.WriteLine("{0}{1}", Environment.NewLine, "Press [Enter] to exit...");
            Console.ReadLine();
        }
    }
}