หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ในบทความนี้ คุณจะได้เรียนรู้วิธีการสร้างแบบจําลอง และปรับใช้การขึ้นต่อกันข้ามคลังสินค้า โดยใช้โครงการฐานข้อมูล SQL ใน Visual Studio Code คุณเริ่มต้นจากโครงการคลังสินค้าที่มีอยู่สองโครงการ และกําหนดค่าการพึ่งพาแบบทางเดียวระหว่างกันโดยใช้การอ้างอิงฐานข้อมูล
บทความนี้สร้างขึ้นจากแนวคิดใน พัฒนาโครงการคลังสินค้าใน Visual Studio Code และถือว่าคุณพอใจในการสร้างและเผยแพร่โครงการคลังสินค้าเดียวอยู่แล้ว
ข้อกําหนดเบื้องต้น
ก่อนที่คุณจะเริ่ม โปรดตรวจสอบให้แน่ใจว่าคุณ:
- สร้าง คลังสินค้า Fabric สองแห่งใน พื้นที่ทํางานเดียวกัน
- เมื่อต้องการสร้างคลังสินค้าตัวอย่างใหม่ โปรดดู สร้างคลังสินค้าตัวอย่างใน Microsoft Fabric
- สร้างหรือแยก ฐานข้อมูลโครงการ สําหรับแต่ละคลังสินค้าใน Visual Studio Code
- เมื่อต้องการสร้างโครงการฐานข้อมูลสําหรับคลังสินค้าที่มีอยู่ของคุณหรือคลังสินค้าใหม่ ให้ดูที่ พัฒนาโครงการคลังสินค้าใน 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 โดเมน ดังนี้
- ยอดขาย – ใบสั่งของลูกค้า รายได้ และเมตริกไปป์ไลน์
- การตลาด – แคมเปญ ช่องทาง และเมตริกการมีส่วนร่วม
แต่ละโดเมนมี:
คลังสินค้าผ้าในพื้นที่ทํางานเดียวกัน:
ZavaSalesWarehouseZavaMarketingWarehouse
<โครงการฐานข้อมูล >c0 ใน Visual Studio Code:
Zava.Sales.WarehouseZava.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วัตถุที่จะบังคับให้มีวงจรการขึ้นต่อกันในเวลาปรับใช้
เคล็ดลับ
สําหรับคลังสินค้าแต่ละคู่ ให้วาดแผนภาพลูกศรอย่างง่าย (Sales → Marketing) หากคุณพบลูกศรชี้ไปทั้งสองทิศทางสําหรับ วัตถุประเภทเดียวกัน ให้รีแฟกเตอร์การออกแบบเพื่อคืนการพึ่งพาแบบทางเดียว
หลีกเลี่ยงการพึ่งพาแบบวนซ้ํา
การ ขึ้นต่อกันแบบวนซ้ํา เกิดขึ้นเมื่อคลังสินค้า 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 ภายนอกเพื่อประสานคําสั่งเผยแพร่ในคลังสินค้าหลายแห่ง