# 从本地 Excel 到 NL2SQL 智能问数

MOI 支持将 Excel 导入 Catalog 并转换为可查询的数据表。数据表加入知识库后，用户可以直接使用自然语言提问，平台会生成 SQL、执行查询并整理结果，用于汇总指标、比较不同维度或核对业务数据。

本教程使用微软公开的销售示例数据进行演示。文件包含国家、产品、销量、销售额、利润和日期等字段，您也可以换成自己的 Excel，操作方式相同。

## 你将完成什么

- 将一份本地 Excel 导入 Catalog，生成一张可查询的数据表；
- 创建知识库并添加该数据表；
- 使用自然语言查询销售额和利润；
- 查看 MOI 返回的数据结果和生成的 SQL。

## 开始前准备

- 准备一个 MOI 账号，可前往 [MOI 云端登录/注册](https://moi.matrixorigin.cn/)；
- 下载微软公开的 [Financial Sample.xlsx](https://download.microsoft.com/download/1/4/E/14EDED28-6C58-4055-A65C-23B4DA81C4DE/Financial%20Sample.xlsx)。

## 操作步骤

### 1. 将 Excel 导入 Catalog

1. 登录 MOI，在左侧导航的 **数据连接** 中选择 **导入任务**。
2. 点击 **新建导入任务**，选择 **结构化**。
3. 在数据来源中选择 **本地上传**，上传 `Financial Sample.xlsx`。
4. 选择工作表 `Sheet1`。
5. 在导入目标中选择 **新建表**，并将表保存到以下位置：

   ```text
   <当前工作区 Catalog> / tutorial_data / excel_analysis / financial_sample
   ```

   其中，`tutorial_data` 是目录，`excel_analysis` 是数据库，`financial_sample` 是表。如果目录或数据库尚未创建，可以在选择目标位置时新建。

6. 确认第一行为列名，数据从第二行开始。
7. 检查表定义。除以下字段外，其余字段保持默认的 `VARCHAR(255)`：

   - `Date`：设置为 `DATE`；
   - `Month Number`、`Year`：设置为 `INT`。

   ```{image} ../assets/images/tutorials/excel-nl2sql-import-config.png
   :alt: 上传 Financial Sample Excel 并配置工作表、目标数据库和表定义
   ```

8. 点击 **创建并开始导入**，等待任务状态变为 **已完成**。

```{image} ../assets/images/tutorials/excel-nl2sql-import-completed.png
:alt: 导入任务列表中的 Financial Sample Excel 已完成状态
```

导入完成后，可以在 **资源中心 > Catalog > tutorial_data > excel_analysis > financial_sample** 中查看表结构和数据。

### 2. 创建知识库

1. 在左侧导航的 **资源中心** 中选择 **知识库**。
2. 点击 **创建知识库**。
3. 输入知识库名称，例如 `financial_sales_knowledge`；用途说明可以填写“用于查询销售额、利润和产品表现”。
4. 点击 **完成**。

创建完成后，页面会自动进入知识库详情页。

### 3. 添加数据表

1. 在知识库详情页点击 **添加数据**。
2. 在 **选择数据** 窗口中，依次打开当前工作区的 Catalog、目录 `tutorial_data` 和数据库 `excel_analysis`。
3. 选中表 `financial_sample`，点击 **添加**。

   ```{image} ../assets/images/tutorials/excel-nl2sql-add-table.png
   :alt: 从 Catalog 中选择 financial_sample 表并添加到知识库
   ```

4. 确认知识库的数据源列表中已经显示该表，并且启用状态已打开。

### 4. 发起智能问数

1. 返回知识库列表，在 `financial_sales_knowledge` 卡片上点击 **对话**。

   ```{image} ../assets/images/tutorials/excel-nl2sql-chat-entry.png
   :alt: 从 financial_sales_knowledge 知识库卡片进入对话
   ```

2. 输入以下问题：

   ```text
   按国家汇总销售额和利润，并按利润从高到低排序。
   ```

3. 查看 MOI 返回的汇总结果和数据来源。展开思考过程，可以查看本次查询生成的 SQL。

   ```{image} ../assets/images/tutorials/excel-nl2sql-first-answer.png
   :alt: MOI 按国家汇总销售额和利润并返回排序结果
   ```

4. 继续提问：

   ```text
   2014 年哪个产品的销售额最高？请给出产品名称和销售额。
   ```

   ```{image} ../assets/images/tutorials/excel-nl2sql-second-answer.png
   :alt: MOI 查询并比较 2014 年各产品销售额
   ```

您还可以按市场类型、折扣等级或月份继续追问。每次提问都可以沿用上一轮上下文，不需要重新选择数据表。

## 教程完成

您已经完成了从本地 Excel 到智能问数的完整流程：Excel 数据已导入 Catalog 并生成表，数据表已加入知识库，MOI 可以根据自然语言生成 SQL，并返回可直接查看的数据结果。
