ตัวอย่างทักษะ AI ที่มีชุดข้อมูล AdventureWorks (ตัวอย่าง)

บทความนี้แสดงวิธีการกําหนดค่าทักษะ AI บนชุดข้อมูล AdventureWorks

สำคัญ

คุณลักษณะนี้อยู่ในตัวอย่าง

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

สร้างเลคเฮ้าส์ด้วย AdventureWorksDW

ก่อนอื่นสร้างเลคเฮ้าส์และกรอกข้อมูลที่จําเป็น

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

  1. สร้างสมุดบันทึกใหม่ในพื้นที่ทํางานที่คุณต้องการสร้างทักษะ AI ของคุณ

  2. ทางด้านซ้ายของบานหน้าต่าง Explorer ให้เลือก + แหล่งข้อมูล ตัวเลือกนี้เพิ่มเลคเฮ้าส์ที่มีอยู่แล้วหรือสร้างเลคเฮ้าส์ใหม่

  3. ในเซลล์ด้านบนสุด ให้เพิ่มส่วนย่อยของโค้ดต่อไปนี้:

    import pandas as pd
    from tqdm.auto import tqdm
    base = "https://synapseaisolutionsa.blob.core.windows.net/public/AdventureWorks"
    
    # load list of tables
    df_tables = pd.read_csv(f"{base}/adventureworks.csv", names=["table"])
    
    for table in (pbar := tqdm(df_tables['table'].values)):
        pbar.set_description(f"Uploading {table} to lakehouse")
    
        # download
        df = pd.read_parquet(f"{base}/{table}.parquet")
    
        # save as lakehouse table
        spark.createDataFrame(df).write.mode('overwrite').saveAsTable(table)
    
  4. เลือกเรียกใช้ทั้งหมด

    สกรีนช็อตที่แสดงสมุดบันทึกที่มีรหัสการอัปโหลด AdventureWorks

หลังจากนั้นไม่กี่นาทีเลคเฮ้าส์จะมีข้อมูลที่จําเป็น

สร้างทักษะ AI

  1. หากต้องการสร้างทักษะ AI ใหม่ ให้ไปที่ ประสบการณ์ด้านวิทยาศาสตร์ ข้อมูล และเลือก ทักษะ AI

    สกรีนช็อตแสดงตําแหน่งที่จะสร้างทักษะ AI

  2. ป้อนชื่อเพื่อสร้างทักษะ AI

เลือกข้อมูล

เลือกเลคเฮ้าส์ที่คุณสร้างขึ้น และเลือกเชื่อมต่อ จากนั้นคุณต้องเลือกตารางที่คุณต้องการให้ทักษะ AI มีการเข้าถึงที่พร้อมใช้งาน

แบบฝึกหัดนี้ใช้ตารางเหล่านี้:

  • DimCustomer
  • DimDate
  • DimGeography
  • DimProduct
  • DimProductCategory
  • DimPromotion
  • DimReseller
  • DimSalesTerritory
  • FactInternetSales
  • FactResellerSales

ให้คําแนะนํา

เมื่อคุณถามคําถามเกี่ยวกับทักษะ AI ด้วยตารางที่ระบุไว้ครั้งแรก ทักษะของ AI จะตอบคําถามเหล่านั้นได้อย่างเป็นธรรม ตัวอย่างเช่น สําหรับคําถาม ผลิตภัณฑ์ที่ขายได้มากที่สุดคืออะไร ทักษะ AI จะส่งกลับ:

  • Long-Sleeve Logo Jersey, L

อย่างไรก็ตาม คิวรี SQL ต้องการการปรับปรุงบางอย่าง ก่อนอื่น จะดู FactResellerSales ที่ตารางเท่านั้น ซึ่งจะ FactInternetSales ละเว้นตาราง ประการที่สอง จะสั่งซื้อผลิตภัณฑ์ตามปริมาณคําสั่งซื้อ เมื่อรายได้ยอดขายทั้งหมดที่เกี่ยวข้องกับผลิตภัณฑ์เป็นการพิจารณาที่สําคัญที่สุด ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงตัวอย่างแรกเกี่ยวกับทักษะ AI คําถามเกี่ยวกับยอดขายสูงสุดของผลิตภัณฑ์

เพื่อปรับปรุงการสร้างคิวรี ให้ระบุคําแนะนําบางอย่างดังที่แสดงในตัวอย่างเหล่านี้:

  • เมื่อใดก็ตามที่ฉันถามเกี่ยวกับผลิตภัณฑ์หรือรายการ "ที่ขายมากที่สุด" เมตริกของดอกเบี้ยคือรายได้ยอดขายรวมและไม่ใช่ปริมาณการสั่งซื้อ
  • ตารางหลักที่จะใช้คือFactInternetSales ใช้ FactResellerSales เฉพาะในกรณีที่ถูกถามอย่างชัดเจนเกี่ยวกับการขายต่อ หรือเมื่อถูกถามเกี่ยวกับยอดขายทั้งหมด

การถามคําถามอีกครั้งจะส่งกลับคําตอบที่แตกต่างกัน ดัง Mountain-200 Black, 46ที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงตัวอย่างที่สองของทักษะ AI คําถามเกี่ยวกับยอดขายสูงสุดของผลิตภัณฑ์

SQL ที่สอดคล้องกันดึงมาจาก FactInternetSales ตาราง และเรียงลําดับตามผลรวมของยอดขาย AI ทําตามคําแนะนํา

เมื่อคุณดําเนินต่อเพื่อทดลองกับคิวรี คุณควรเพิ่มคําแนะนําเพิ่มเติม

สถานการณ์นี้ใช้ชุดคําแนะนําต่อไปนี้:

  • เมื่อใดก็ตามที่ฉันถามเกี่ยวกับผลิตภัณฑ์หรือรายการ "ที่ขายมากที่สุด" เมตริกของดอกเบี้ยคือรายได้จากการขายและไม่ใช่ปริมาณการสั่งซื้อ
  • ตารางหลักที่จะใช้คือFactInternetSales ใช้ FactResellerSales เฉพาะในกรณีที่ถูกถามอย่างชัดเจนเกี่ยวกับการขายต่อ หรือเมื่อถูกถามเกี่ยวกับยอดขายทั้งหมด
  • เมื่อถามเกี่ยวกับผลกระทบของการส่งเสริมการขาย ให้ทําเช่นนั้นกับการเพิ่มรายได้จากการขาย ไม่ใช่แค่จํานวนหน่วยที่ขายเท่านั้น
  • สําหรับข้อมูลเชิงลึกของลูกค้า ให้มุ่งเน้นไปที่ยอดขายทั้งหมดต่อลูกค้าแทนที่จะเป็นจํานวนคําสั่งซื้อ
  • ใช้ DimDate เพื่อแยกช่วงเวลาเฉพาะ (ตัวอย่างเช่น ปี เดือน) เมื่อดําเนินการวิเคราะห์ตามเวลา
  • เมื่อวิเคราะห์ข้อมูลทางภูมิศาสตร์ ให้จัดลําดับความสําคัญของรายได้การขายทั้งหมดและยอดขายเฉลี่ยต่อคําสั่งซื้อสําหรับแต่ละภูมิภาค
  • สําหรับข้อมูลเชิงลึกประเภทผลิตภัณฑ์ ใช้ DimProductCategory เพื่อจัดกลุ่มผลิตภัณฑ์ตามนั้นเสมอ
  • เมื่อเปรียบเทียบยอดขายระหว่างภูมิภาค ใช้ DimSalesTerritory เพื่อรายละเอียดดินแดนที่ถูกต้อง
  • ใช้ DimCurrency เพื่อทําให้ข้อมูลการขายเป็นมาตรฐานหากวิเคราะห์ยอดขายในสกุลเงินที่แตกต่างกัน
  • สําหรับข้อมูลผลิตภัณฑ์โดยละเอียด ให้เข้าร่วม FactInternetSales กับ DimProductเสมอ
  • ใช้ DimPromotion เพื่อวิเคราะห์ประสิทธิภาพของแคมเปญส่งเสริมการขายที่แตกต่างกัน
  • เพื่อประสิทธิภาพของผู้จําหน่าย ให้มุ่งเน้นไปที่ยอดขายรวม ไม่ใช่แค่จํานวนผลิตภัณฑ์ที่ขายเท่านั้น
  • เมื่อวิเคราะห์แนวโน้มเมื่อเวลาผ่านไป ใช้ FactInternetSales และรวมกับ DimDate การจัดกลุ่มข้อมูลตามเดือน ไตรมาส หรือปี
  • ตรวจสอบความสอดคล้องของข้อมูลโดยการ FactInternetSales เชื่อมกับตารางมิติที่เกี่ยวข้องเสมอ
  • ใช้ SUM เพื่อรวมข้อมูลยอดขายเพื่อให้แน่ใจว่าคุณกําลังจัดเก็บค่าทั้งหมดอย่างถูกต้อง
  • จัดลําดับความสําคัญของเมตริกรายได้การขายเทียบกับปริมาณการสั่งซื้อเพื่อวัดผลกระทบทางการเงินได้อย่างถูกต้อง
  • จัดกลุ่มตามมิติที่เกี่ยวข้องเสมอ (ตัวอย่างเช่น ผลิตภัณฑ์ ลูกค้า วันที่) เพื่อรับข้อมูลเชิงลึกโดยละเอียด
  • เมื่อถามเกี่ยวกับข้อมูลประชากรของลูกค้า ให้รวม DimCustomer กับตารางข้อเท็จจริงที่เกี่ยวข้อง
  • สําหรับยอดขายตามการส่งเสริมการขาย ให้เข้าร่วม FactInternetSales และ DimPromotion จัดกลุ่มตามชื่อโปรโมชัน
  • ปรับตัวเลขการขายให้เป็นมาตรฐานสําหรับการ DimCurrency เปรียบเทียบที่เกี่ยวข้องกับสกุลเงินที่แตกต่างกัน
  • ใช้ ORDER BY คําสั่งย่อยเพื่อเรียงลําดับผลลัพธ์ตามเมตริกความสนใจ (ตัวอย่างเช่น รายได้จากการขาย คําสั่งซื้อทั้งหมด)
  • ListPrice ใน DimProduct คือราคาขายที่แนะนํา ในขณะที่ UnitPrice ใน FactInternetSales และ FactResellerSales เป็นราคาจริงที่ขายแต่ละหน่วย สําหรับกรณีการใช้ส่วนใหญ่ในรายได้ ควรใช้ราคาต่อหน่วย
  • จัดอันดับตัวแทนจําหน่ายอันดับสูงสุดตามปริมาณยอดขาย

หากคุณคัดลอกข้อความนี้ลงในบันทึกย่อสําหรับกล่องข้อความแบบจําลอง AI จะอ้างอิงถึงคําแนะนําเหล่านี้เมื่อสร้างคิวรี SQL

แสดงตัวอย่าง

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

ตัวอย่างเช่น คําถาม จํานวนลูกค้าที่ใช้งานอยู่เรามีวันที่ 1 มิถุนายน 2013 สร้าง SQL ที่ถูกต้องบางตัวดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงตัวอย่างแรกสําหรับคําถามจํานวนลูกค้าที่ใช้งานอยู่ของทักษะ AI

อย่างไรก็ตามมันไม่ใช่คําตอบที่ดี

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

สกรีนช็อตแสดงตําแหน่งที่คุณสามารถแก้ไขตัวอย่างที่คุณให้กับ AI

จากนั้นคุณสามารถอัปโหลดตัวอย่างได้

สกรีนช็อตแสดงตัวอย่างคิวรี SQL ทักษะ AI

การทําซ้ําของคําถามส่งกลับคําตอบที่ปรับปรุงแล้ว

สกรีนช็อตที่แสดงตัวอย่างที่สองของคําถามจํานวนลูกค้าที่ใช้งานอยู่ของทักษะ AI

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

    {
    "how many active customers did we have June 1st, 2010?": "SELECT COUNT(DISTINCT fis.CustomerKey) AS ActiveCustomerCount FROM FactInternetSales fis JOIN DimDate dd ON fis.OrderDateKey = dd.DateKey WHERE dd.FullDateAlternateKey BETWEEN DATEADD(MONTH, -6, '2010-06-01') AND '2010-06-01' GROUP BY fis.CustomerKey HAVING COUNT(fis.SalesOrderNumber) >= 2;",
    "which promotion was the most impactful?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM FactInternetSales fis JOIN DimPromotion dp ON fis.PromotionKey = dp.PromotionKey GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "who are the top 5 customers by total sales amount?": "SELECT TOP 5 CONCAT(dc.FirstName, ' ', dc.LastName) AS CustomerName, SUM(fis.SalesAmount) AS TotalSpent FROM FactInternetSales fis JOIN DimCustomer dc ON fis.CustomerKey = dc.CustomerKey GROUP BY CONCAT(dc.FirstName, ' ', dc.LastName) ORDER BY TotalSpent DESC;",
    "what is the total sales amount by year?": "SELECT dd.CalendarYear, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis JOIN DimDate dd ON fis.OrderDateKey = dd.DateKey GROUP BY dd.CalendarYear ORDER BY dd.CalendarYear;",
    "which product category generated the highest revenue?": "SELECT dpc.EnglishProductCategoryName, SUM(fis.SalesAmount) AS CategoryRevenue FROM FactInternetSales fis JOIN DimProduct dp ON fis.ProductKey = dp.ProductKey JOIN DimProductCategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY CategoryRevenue DESC;",
    "what is the average sales amount per order by territory?": "SELECT dst.SalesTerritoryRegion, AVG(fis.SalesAmount) AS AvgOrderValue FROM FactInternetSales fis JOIN DimSalesTerritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY AvgOrderValue DESC;",
    "what is the total sales amount by currency?": "SELECT dc.CurrencyName, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis JOIN DimCurrency dc ON fis.CurrencyKey = dc.CurrencyKey GROUP BY dc.CurrencyName ORDER BY TotalSales DESC;",
    "which product had the highest sales revenue last year?": "SELECT dp.EnglishProductName, SUM(fis.SalesAmount) AS TotalRevenue FROM FactInternetSales fis JOIN DimProduct dp ON fis.ProductKey = dp.ProductKey JOIN DimDate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dp.EnglishProductName ORDER BY TotalRevenue DESC;",
    "what are the monthly sales trends for the last year?": "SELECT dd.CalendarYear, dd.MonthNumberOfYear, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis JOIN DimDate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dd.CalendarYear, dd.MonthNumberOfYear ORDER BY dd.CalendarYear, dd.MonthNumberOfYear;",
    "how did the latest promotion affect sales revenue?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM FactInternetSales fis JOIN DimPromotion dp ON fis.PromotionKey = dp.PromotionKey WHERE dp.StartDate >= DATEADD(MONTH, -1, GETDATE()) GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "which territory had the highest sales revenue?": "SELECT dst.SalesTerritoryRegion, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis JOIN DimSalesTerritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY TotalSales DESC;",
    "who are the top 5 resellers by total sales amount?": "SELECT TOP 5 dr.ResellerName, SUM(frs.SalesAmount) AS TotalSales FROM FactResellerSales frs JOIN DimReseller dr ON frs.ResellerKey = dr.ResellerKey GROUP BY dr.ResellerName ORDER BY TotalSales DESC;",
    "what is the total sales amount by customer region?": "SELECT dg.EnglishCountryRegionName, SUM(fis.SalesAmount) AS TotalSales FROM FactInternetSales fis JOIN DimCustomer dc ON fis.CustomerKey = dc.CustomerKey JOIN DimGeography dg ON dc.GeographyKey = dg.GeographyKey GROUP BY dg.EnglishCountryRegionName ORDER BY TotalSales DESC;",
    "which product category had the highest average sales price?": "SELECT dpc.EnglishProductCategoryName, AVG(fis.UnitPrice) AS AvgPrice FROM FactInternetSales fis JOIN DimProduct dp ON fis.ProductKey = dp.ProductKey JOIN DimProductCategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY AvgPrice DESC;",
}

ทดสอบและทบทวนทักษะด้าน AI

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

ใช้ทักษะ AI ทางโปรแกรม

คุณสามารถใช้ทักษะ AI ทางโปรแกรมภายในสมุดบันทึก Fabric หากต้องการตรวจสอบว่าทักษะ AI มีค่า URL ที่เผยแพร่หรือไม่ ให้เลือก การตั้งค่า ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงการเลือกการตั้งค่าทักษะ AI

ก่อนที่คุณจะเผยแพร่ทักษะ AI จะไม่มีค่า URL ที่เผยแพร่ตามที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงว่าทักษะ AI ไม่มีค่า URL ที่เผยแพร่ก่อนการเผยแพร่

หลังจากที่คุณตรวจสอบประสิทธิภาพของทักษะ AI คุณอาจตัดสินใจที่จะเผยแพร่ ในกรณีนี้ เลือก เผยแพร่ ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดงการเลือกตัวเลือกเผยแพร่

URL ที่เผยแพร่สําหรับทักษะ AI จะปรากฏขึ้น ดังที่แสดงในภาพหน้าจอนี้:

สกรีนช็อตที่แสดง URL ที่เผยแพร่

จากนั้นคุณสามารถคัดลอก URL ที่เผยแพร่และใช้งานได้ในสมุดบันทึกสําหรับ Fabric ด้วยวิธีนี้ คุณสามารถคิวรีทักษะ AI โดยการเรียกใช้ API ทักษะ AI ในสมุดบันทึก Fabric วาง URL ที่คัดลอกในส่วนย่อยของโค้ดนี้ จากนั้นแทนที่คําถามด้วยคิวรีใด ๆ ที่เกี่ยวข้องกับทักษะ AI ของคุณ ตัวอย่างนี้ใช้ \<generic published URL value\> เป็น URL

import requests
import json
import pprint
from synapse.ml.mlflow import get_mlflow_env_config


# the URL could change if the workspace is assigned to a different capacity
url = "https://<generic published URL value>"

configs = get_mlflow_env_config()

headers = {
    "Authorization": f"Bearer {configs.driver_aad_token}",
    "Content-Type": "application/json; charset=utf-8"
}

question = "{userQuestion: \"what is an example product?\"}"

response = requests.post(url, headers=headers, data = question)

print("RESPONSE: ", response)

print("")

response = json.loads(response.content)

print(response["result"])