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

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

พาร์ ติ ชัน

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

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

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

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

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

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

Partition naming granularity

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

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

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

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

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

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

Partitions in SSMS

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

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

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 หรือสูงกว่า

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

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

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

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

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

Tabular Editor

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

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

Filter out product key

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

หลังจากการดําเนินการรีเฟรชเริ่มต้นเสร็จสมบูรณ์ ย้อนกลับใน Power Query Editor ตัวกรองเพิ่มเติมในคอลัมน์ ProductKey จะถูกลบออก หลังจากคลิกปิด&นําไปใช้ใน Power Query Editor และบันทึกแบบจําลอง จะไม่มีการเผยแพร่แบบจําลองอีกครั้ง หากแบบจําลองได้รับการเผยแพร่อีกครั้ง ระบบจะเขียนทับการตั้งค่านโยบายการรีเฟรชแบบเพิ่มหน่วยและบังคับให้มีการรีเฟรชเต็มรูปแบบบนชุดข้อมูลเมื่อมีการดําเนินการรีเฟรชครั้งต่อมาจากบริการ แต่ให้ดําเนินการ ปรับใช้เมตาดาต้าโดยใช้ ALM Toolkit ที่ลบตัวกรองบนคอลัมน์ 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 ไปยังพื้นที่ทํางาน ถ้ามีชุดข้อมูลที่มีชื่อเดียวกันอยู่แล้ว คุณจะได้รับพร้อมท์ให้แทนที่ชุดข้อมูลที่มีอยู่

Replace dataset prompt

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

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

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

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

ALM Toolkit

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

คุณยังสามารถใช้ 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 จากนั้นอัปเดตพื้นที่ทํางานUrl เพื่อให้ตัวอย่างโค้ดสามารถเชื่อมต่อกับชุดข้อมูลของคุณได้ อัพเดตบรรทัดรหัสเพิ่มเติมใดๆ ตามความจําเป็น

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();
        }
    }
}

ขั้นตอนถัดไป

พาร์ติชันในแบบจําลองตาราง
เครื่องมือภายนอกสําหรับ Power BI
กำหนดค่าการรีเฟรชตามกำหนดเวลา
แก้ไขปัญหาการรีเฟรชแบบเพิ่มหน่วย