พัฒนาและปรับใช้การขึ้นต่อกันข้ามคลังสินค้า

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

บทความนี้สร้างขึ้นจากแนวคิดใน พัฒนาโครงการคลังสินค้าใน Visual Studio Code และถือว่าคุณพอใจในการสร้างและเผยแพร่โครงการคลังสินค้าเดียวอยู่แล้ว

ข้อกําหนดเบื้องต้น

ก่อนที่คุณจะเริ่ม โปรดตรวจสอบให้แน่ใจว่าคุณ:

  • สร้าง คลังสินค้า Fabric สองแห่งใน พื้นที่ทํางานเดียวกัน
  • สร้างหรือแยก ฐานข้อมูลโครงการ สําหรับแต่ละคลังสินค้าใน Visual Studio Code
  • ติดตั้ง Visual Studio Code บนเวิร์กสเตชันของคุณ
  • ติดตั้ง SDK .NET เพื่อสร้างและเผยแพร่โครงการฐานข้อมูล
  • ติดตั้งส่วนขยาย Visual Studio Code สองรายการ: SQL Database Projects และ SQL Server (mssql)
    • คุณสามารถติดตั้งส่วนขยายที่จําเป็นได้โดยตรงจากภายใน Visual Studio Code marketplace โดยค้นหา "โครงการฐานข้อมูล SQL" หรือ "SQL Server (mssql)"
  • โครงการคลังสินค้าตรวจสอบความถูกต้อง สร้าง และสามารถเผยแพร่ใน Visual Studio Code

Note

บทความนี้มุ่งเน้นไปที่ โครงการคลังสินค้า ใน Visual Studio Code และวิธีที่คุณกําหนดรุ่นใน Git เป็นโครงการโค้ดปกติ การผสานรวม Fabric Git สําหรับพื้นที่ทํางานและรายการคลังสินค้าจะกล่าวถึงแยกต่างหากในหัวข้อ Development and Deployment และ Git integration บทความนี้สมมติว่า Fabric workspace ของคุณเป็นเป้าหมายสําหรับการปรับใช้ และ T-SQL schema อยู่ในโปรเจกต์ Visual Studio Code หนึ่งหรือมากกว่าที่คุณควบคุมเวอร์ชันใน Git

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

สถานการณ์สมมติ: คลังสินค้าข้ามโดเมนของ Zava Analytics

Zava Analytics ใช้โดเมนธุรกิจ 2 โดเมน ดังนี้

  • ยอดขาย – ใบสั่งของลูกค้า รายได้ และเมตริกไปป์ไลน์
  • การตลาด – แคมเปญ ช่องทาง และเมตริกการมีส่วนร่วม

แต่ละโดเมนมี:

  • คลังสินค้าผ้าในพื้นที่ทํางานเดียวกัน:

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • <โครงการฐานข้อมูล >c0 ใน Visual Studio Code:

    • Zava.Sales.Warehouse
    • Zava.Marketing.Warehouse

ในการสร้าง ELT และการรายงานแบบครบวงจร แต่ละโดเมนต้องมี มุมมองแบบอ่านอย่างเดียว เพื่อเข้าถึงข้อมูลจากอีกโดเมนหนึ่ง

  • Sales ต้องการการมีส่วนร่วมทางการตลาดโดยลูกค้า
  • Marketing ต้องการประสิทธิภาพการขายตามแคมเปญ

คุณจําเป็นต้อง:

  • สร้างการ พึ่งพาข้ามคลังสินค้าทางเดียว ผ่านการอ้างอิงฐานข้อมูล
  • หลีกเลี่ยงการพึ่งพาแบบวนซ้ํา

ตรวจสอบให้แน่ใจว่าการพึ่งพาระหว่างคลังสินค้าเป็นแบบทางเดียว

สําหรับคลังสินค้าแต่ละคู่ ให้เลือก ทิศทางสําหรับการขึ้นต่อกันเชิงตรรกะ:

ตัวอย่าง:

  • Sales ขึ้นอยู่กับ Marketing ข้อมูลการมีส่วนร่วม
  • Marketingไม่ขึ้นอยู่กับSalesอ็อบเจ็กต์ใด ๆ ที่จําเป็นในเวลาปรับใช้

ในทางปฏิบัติ:

Zava.Sales.Warehouseมีการอ้างอิงฐานข้อมูลไปยังZava.Marketing.Warehouse

  • T-SQL ใน Sales คลังสินค้าสามารถใช้ชื่อสามส่วนเช่น:
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse ไม่อ้างอิงSalesวัตถุที่จะบังคับให้มีวงจรการขึ้นต่อกันในเวลาปรับใช้

เคล็ดลับ

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

หลีกเลี่ยงการพึ่งพาแบบวนซ้ํา

การ ขึ้นต่อกันแบบวนซ้ํา เกิดขึ้นเมื่อคลังสินค้า A และคลังสินค้า B พึ่งพาซึ่งกันและกันในลักษณะที่กลไกจัดการไม่สามารถแก้ไขได้ในการปรับใช้ครั้งเดียว

ตัวอย่างปัญหา (อย่าทําเช่นนี้):

  • ZavaSalesWarehouse.dbo.CustomerRollup ทิวทัศน์:
    CREATE VIEW dbo.CustomerRollup AS
    SELECT  c.CustomerId,
            c.TotalRevenue,
            m.LastCampaignId
    FROM    dbo.CustomerRevenue AS c
    LEFT OUTER JOIN   
            ZavaMarketingWarehouse.dbo.CustomerEngagement AS m
            ON c.CustomerId = m.CustomerId;
    
  • ZavaMarketingWarehouse.dbo.CampaignAttribution ทิวทัศน์:
    CREATE VIEW dbo.CampaignAttribution AS
    SELECT  m.CampaignId,
            SUM(s.TotalRevenue) AS RevenueAttributed
    FROM    dbo.Campaigns AS m
    LEFT OUTER JOIN    
            ZavaSalesWarehouse.dbo.CustomerRollup AS s
            ON m.CampaignId = s.LastCampaignId
    GROUP BY m.CampaignId;
    

ในรูปแบบต่อต้านนี้:

  • CustomerRollupใน ยอดขายขึ้นอยู่กับCustomerEngagementใน Marketing
  • CampaignAttribution ใน การตลาด ขึ้นอยู่กับ CustomerRollupใน การขาย

รูปแบบต่อต้านนี้จะสร้างวงจร: มุมมองการขาย→มุมมองการตลาด→มุมมองการขายอีกครั้ง

การแนะแนว:

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

การอ้างอิงข้ามคลังสินค้าโดยตรงผ่านการอ้างอิงฐานข้อมูล

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

ขั้นตอนที่ 1: เริ่มต้นจากโครงการคลังสินค้าที่มีอยู่สองโครงการ

คุณควรมี:

  • Zava.Sales.Warehouse → ปรับใช้เพื่อ ZavaSalesWarehouse
  • Zava.Marketing.Warehouse → ปรับใช้เพื่อ ZavaMarketingWarehouse

แต่ละโครงการถูกสร้างขึ้นหรือแยกโดยใช้ขั้นตอนใน พัฒนาโครงการคลังสินค้าใน Visual Studio Code

ขั้นตอนที่ 2: เพิ่มการอ้างอิงฐานข้อมูลจาก Sales ไปยัง Marketing

  • ใน Visual Studio Code ให้เปิดมุมมอง Database Projects
  • คลิกขวาที่ Zava.Sales.Warehouse โครงการ
  • เลือก เพิ่มการอ้างอิงฐานข้อมูล....
  • เลือกอย่างใดอย่างหนึ่งต่อไปนี้
    • โครงการฐานข้อมูลในพื้นที่ทํางานปัจจุบัน (โครงการฐานข้อมูลที่อ้างอิงด้วยวิธีนี้จะต้องเปิดใน Visual Studio Code) หรือ
    • แอปพลิเคชันระดับข้อมูล (.dacpac) (สมมติว่าคุณได้สร้างถ้าคุณมีบิลด์ .dacpac สําหรับ Marketing คลังสินค้า)
  • ตั้งค่าตัวเลือกการอ้างอิง:
    • ประเภทอ้างอิง: เซิร์ฟเวอร์เดียวกัน ฐานข้อมูลต่างกัน
    • ชื่อฐานข้อมูลหรือตัวแปร: ใช้ตัวแปร SQLCMD ตัวอย่างเช่น[$(MarketingWarehouseName)]
  • บันทึกและสร้างโครงการ Sales ใหม่

ใน .sqlproj ไฟล์ คุณควรเห็นรายการที่คล้ายกับ:

<ItemGroup>
  <ArtifactReference Include="..\Zava.Marketing.Warehouse\bin\Debug\Zava.Marketing.Warehouse.dacpac">
    <DatabaseVariableLiteralValue>$(MarketingWarehouseName)</DatabaseVariableLiteralValue>
  </ArtifactReference>
</ItemGroup>
<ItemGroup>
  <SqlCmdVariable Include="MarketingWarehouseName">
    <DefaultValue>ZavaMarketingWarehouse</DefaultValue>
  </SqlCmdVariable>
</ItemGroup>

เคล็ดลับ

การใช้ตัวแปร SQLCMD สําหรับ ชื่อคลังสินค้าระยะไกล ช่วยให้คุณสามารถนําโครงการเดียวกันกลับมาใช้ใหม่ในสภาพแวดล้อมทั้งหมดของคุณ เช่น Dev/Test/Prod ซึ่งชื่อคลังสินค้าอาจแตกต่างกัน

ขั้นตอนที่ 3: สร้างมุมมองข้ามคลังสินค้าใน Sales

ใน Sales โครงการ ให้เพิ่มมุมมองที่อ่านจาก Marketing คลังสินค้า:

-- schema/Views/dbo.CustomerEngagementFact.sql
CREATE VIEW [dbo].[CustomerEngagementFact] AS
SELECT
    s.CustomerId,
    s.TotalRevenue,
    m.LatestChannel,
    m.LastEngagementDate
FROM dbo.CustomerRevenue AS s
JOIN [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] AS m
    ON s.CustomerId = m.CustomerId;

ประเด็นสําคัญ:

  • ชื่อ[$(MarketingWarehouseName)].[dbo].[CustomerEngagement]สามส่วนตรงกับรูปแบบ T-SQL ที่ใช้สําหรับการสืบค้นข้ามคลังสินค้าในตัวแก้ไข Fabric SQL
  • DacFx แก้ไขฐานข้อมูลภายนอกผ่านการอ้างอิงฐานข้อมูล

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

ขั้นตอนที่ 4: เผยแพร่คลังสินค้าการตลาด จากนั้น การขาย

เพื่อหลีกเลี่ยงปัญหาการปรับใช้:

  • สร้างและเผยแพร่Zava.Marketing.Warehouse ที่หนึ่ง:
    • คลิกขวาที่โครงการ→สร้าง
    • คลิกขวาที่โปรเจ็กต์→เผยแพร่ →เลือกZavaMarketingWarehouse
  • เมื่อ Marketing การปรับใช้สําเร็จ ให้ สร้างและเผยแพร่Zava.Sales.Warehouse:
    • คลิกขวาที่โครงการ→สร้าง
    • คลิกขวาที่โปรเจ็กต์→เผยแพร่ →เลือกZavaSalesWarehouse

โฟลว์การปรับใช้ที่เป็นผลลัพธ์คือ:

Zava.Marketing.Warehouse (ไม่มีการพึ่งพาภายนอก) → Zava.Sales.Warehouse (ขึ้นอยู่กับ Marketing)

ตอนนี้ คิวรี T-SQL ใดๆ ใน ZavaSalesWarehouse สามารถใช้ dbo.CustomerEngagementFact มุมมอง ซึ่งอ่านภายในจาก Marketing คลังสินค้าโดยใช้ T-SQL ข้ามคลังสินค้า

เรียนรู้ต่อ

  • ผสมผสานรูปแบบนี้กับคําแนะนําเรื่องการควบคุมซอร์สโค้ดและ CI/CD ในการพัฒนาและการติดตั้ง รวมถึงเอกสารการผสานรวม Fabric git
  • ขยายสถานการณ์ Zava Analytics เพื่อรวมสภาพแวดล้อม Dev/Test/Prod โดยใช้ไปป์ไลน์การปรับใช้หรือ CI/CD ภายนอกเพื่อประสานคําสั่งเผยแพร่ในคลังสินค้าหลายแห่ง