การรีเฟรชแบบเพิ่มหน่วยขั้นสูงและข้อมูลแบบเรียลไทม์ที่มีตําแหน่งข้อมูล 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

แผนภาพแสดงกรานูลาริตี้ในการตั้งชื่อพาร์ติชันที่อธิบายไว้ในข้อความ

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

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

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

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

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

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

สกรีนช็อตแสดงหน้าต่างพาร์ติชันใน SSMS

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

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

สกรีนช็อตแสดงปุ่มสคริปต์ในกล่องโต้ตอบตารางกระบวนการ

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

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

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

สกรีนช็อตแสดงตัวแก้ไขตารางที่มีการเลือกใช้นโยบายการรีเฟรช

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

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

สกรีนช็อตแสดงตัวแก้ไข Power Queryพร้อมรหัสที่กรองคีย์ผลิตภัณฑ์

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

สกรีนช็อตแสดงกล่องโต้ตอบแทนที่ชุดข้อมูล

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

สกรีนช็อตแสดงหน้าต่าง 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กําหนดวัตถุด้วยการจัดเก็บที่ต้องการ (หน้าต่าง rolling) และระยะเวลาการรีเฟรชแบบเพิ่มหน่วย รวมถึงนิพจน์ต้นทางที่กรองตารางเป้าหมายตาม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();
        }
    }
}

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