適用対象:✅ Warehouse in Microsoft Fabric
このチュートリアルでは、T-SQLの組み込み AI関数 を使って自然言語でウェアハウステーブルデータを推論する方法を学びます。
dbo.fact_saleテーブルを使って、シンプルなSELECTクエリでAI機能を探索し、より高度な分析クエリで活用し、結果をカラムに永続化します。
Note
このチュートリアルでは、エンド ツー エンドのシナリオの一部を構成します。 このチュートリアルを完了するには、まず以下のチュートリアルをクリアする必要があります:
- ワークスペースを作成する
- 倉庫 を作成する
- Warehouse にデータを取り込む
AI機能でデータを探索する
このタスクでは、表を変えずに単純な SELECT クエリでAI関数をいくつか使い、返ってくるものを探る方法を学びましょう。
最初のチュートリアル で作成したワークスペースが開かれていることを確認します。
記述からカテゴリを抽出する
[ホーム] リボンの [新しい SQL クエリ] を選択します。
クエリ エディターで、以下のコードを貼り付けます。 コードでは、
Alien officer hoodie (Black) XXLなどの記述から色やサイズをAI_EXTRACTで抽出しています。AI_EXTRACTJSONオブジェクトを返すので、OPENJSONを使って属性を別々の列に変換します。-- Extract color and size attributes. SELECT SaleKey, Description, extracted.Color, extracted.Size FROM dbo.fact_sale CROSS APPLY OPENJSON(AI_EXTRACT(Description, 'Color', 'Size')) WITH (Color varchar(50), Size varchar(20)) AS extracted;クエリを実行します。
実行が完了したら、クエリの名前を
Color & Size Extractionに変更します。ColorとSizeが別々の列に入力されているか確認してください。
HTMLとしてのフォーマット説明
新しいクエリを作成し、以下のコードを貼り付けて実行します。 このコードは
AI_GENERATE_RESPONSEを使って、DescriptionをHTML製品概要として書き直し、キー属性リストを付けてウェブページ上でレンダリングできるようにしています。-- Generate a catalog description formatted as HTML, with a summary and an attribute list. SELECT SaleKey, Description, AI_GENERATE_RESPONSE( 'Rewrite as a short e-commerce catalog description. Format the result as HTML: wrap the summary in a <p> tag, then list key attributes as a <dl>, with each <dt> label bolded using <strong> and followed by its <dd> value.', Description ) AS CatalogDescription FROM dbo.fact_sale;クエリの名前を
Short Catalog Description Generationに変更します。CatalogDescriptionを確認し、<p>、<dl>、<dt>、<dd>要素が含まれているか確認してください。
販売品目の情報をまとめる
新しいクエリを作成し、以下のコードを貼り付けて実行します。 このコードは
AI_GENERATE_RESPONSEを使って、Descriptionではなく数値列を販売項目の平文要約に変換します。-- Summarize each sales item in plain text, based on numeric columns only. DECLARE @prompt nvarchar(max) = N'Summarize this sales item in one short sentence for a business report.'; SELECT *, AI_GENERATE_RESPONSE( @prompt, CONCAT( 'Package: ', Package, '. Quantity: ', Quantity, '. Dry items: ', TotalDryItems, '. Chiller items: ', TotalChillerItems, '. Unit price: ', UnitPrice, '. Tax rate: ', TaxRate, '. Profit: ', Profit, '. Total including tax: ', TotalIncludingTax ) ) AS SalesItemSummary FROM dbo.fact_sale;クエリの名前を
Sales Item Summary Generationに変更します。 いくつかのSalesItemSummary値を読んで、同じ行内の数値列を反映しているか確認してください。
各販売品の優先順位を決める
このタスクでは、単一の列を理由に推論するのではなく、複数の列を組み合わせてビジネス判断を支えるより高度なクエリで AI_GENERATE_RESPONSE を活用してください。
新しいクエリを作成し、以下のコードを貼り付けて実行します。 このコードは請求書日、納期、参照日、行数合計、利益、冷蔵処理が必要なチラーアイテム数を一つの入力にまとめ、AIにこれらの信号を一つの数値にまとめて優先度スコアを返すよう求めます。
fact_sale過去の売上を保持しているので、@AsOfDateはライブフルフィルメントキューで使う現在の営業日の代わりとなります。-- Score sales items for fulfillment priority based on invoice-to-delivery time, line total, profit, and chiller items. DECLARE @AsOfDate date = '2016-05-01'; DECLARE @prompt nvarchar(max) = N'Given the invoice date, delivery date, reference date, line total, profit, and number of chiller items below, return a single integer priority score from 1 (low) to 100 (urgent) for sales-item fulfillment. Consider how much time was allowed from invoice to delivery, and how close the delivery date is to the reference date. Larger line totals, closer delivery dates, higher profit, and more chiller items should raise the score. Return only the number.'; SELECT SaleKey, InvoiceDateKey, DeliveryDateKey, TotalIncludingTax, Profit, TotalChillerItems, TRY_CAST(AI_GENERATE_RESPONSE( @prompt, CONCAT( 'Invoice date: ', CONVERT(char(10), InvoiceDateKey, 23), '. Delivery date: ', CONVERT(char(10), DeliveryDateKey, 23), '. Reference date: ', CONVERT(char(10), @AsOfDate, 23), '. Line total: ', TotalIncludingTax, '. Profit: ', Profit, '. Chiller items: ', TotalChillerItems ) ) AS int) AS PriorityScore FROM dbo.fact_sale ORDER BY PriorityScore DESC;クエリの名前を
Sales Item Fulfillment Priority Scoringに変更します。PriorityScore値が 1 ~ 100 の範囲内であり、スコアの高い順に並べ替えられていることを確認してください。
AIの結果を永続化する
これまでの例はAIの結果としては SELECTを生み出しています。 毎回再計算せずに結果を再利用するには、 UPDATEで書き戻します。
説明の文法誤りを修正する
新しいクエリを作成し、以下のコードを貼り付けて実行します。 コードは
AI_FIX_GRAMMARを使ってそのDescriptionを修正し、AIが修正するものがなければ元のテキストを保持します。-- Fix grammar issues in the description, in place. UPDATE dbo.fact_sale SET Description = ISNULL(AI_FIX_GRAMMAR(Description), Description) WHERE Description IS NOT NULL;クエリの名前を
Grammar Correction Updateに変更します。 変更された数行を比較して、修正Description正確か確認してください。
新しい列を生成する
このタスクはまず2つの宛先列を追加し、それを1回の更新で埋め込みます。
新しいクエリを作成し、以下のコードを貼り付けて実行します。 コードは翻訳された説明と製品カテゴリの列を追加します。
-- Add columns for the translated description and the product category. ALTER TABLE dbo.fact_sale ADD DescriptionFr nvarchar(max) NULL, ProductCategory nvarchar(50) NULL;クエリの名前を
Add Translation & Category Columnsに変更します。新しいクエリを作成し、以下のコードを貼り付けて実行します。 このコードは、1回の更新で両方の列を設定し、
DescriptionにはAI_TRANSLATEを使用し、AI_CLASSIFYを用いて各行を、このテーブルに実際に含まれている項目に対応する、ノベルティマグ、衣料品、包装用品などのあらかじめ決められた商品カテゴリに振り分けます。-- Populate the translated description and product category columns. UPDATE dbo.fact_sale SET DescriptionFr = AI_TRANSLATE(Description, 'fr'), ProductCategory = AI_CLASSIFY( Description, 'Apparel', 'Footwear', 'Novelty & Gifts', 'Packaging Materials', 'Toys & Costumes', 'Office Supplies' ) WHERE Description IS NOT NULL;クエリの名前を
Populate Translation & Category Columnsに変更します。 各行でDescriptionFrとProductCategoryが埋められているか確認してください。
次のステップ
チュートリアル: Warehouse でビジュアル クエリ ビルダーを使用してクエリを作成する