# 语义层模型 (Cube)

## 概述

Recurve 的语义层（Semantic Layers）中的 **Cube** 是一种结构化数据模型，旨在实现高效的数据查询与分析。它将数据字段划分为 **指标（Measures）** 和 **维度（Dimensions）**，帮助用户轻松获取洞察。\
Cube 能够抽象复杂查询，提升数据性能和易用性，广泛应用于 BI 分析和报表展示。

## Cube 概念

**Cube** 是一种虚拟的数据模型，代表一个多维数据集，主要由以下部分组成：

* **指标（Measures）：**&#x53EF;进行聚合的数值型字段，例如：收入（Revenue）、销售数量（Sales Count）。
* **维度（Dimensions）：**&#x7528;于分组和筛选的分类字段，例如：产品类别（Product Category）、地区（Region）、日期（Date）。
* **主键（Primary Key, PK）：**&#x7528;于唯一标识 Cube 中每条数据记录，确保数据完整性。
* **外键 / 唯一键（Foreign / Unique Keys）：**&#x6BCF;个 Cube 可以包含 0 个、1 个或多个外键或唯一键，用于关联其他数据模型或数据表。

Cube 的特点：

* **数据模型（Data Model Representation）：**&#x6BCF;个数据模型或数据表都会被创建为一个独立的 Cube。
* **可复用性（Reusability）：**&#x6BCF;个 Cube 可以被重复使用，用于构建语义层视图。
* **与 BI 工具集成（Integration with BI Tools）**&#x43;ube 中定义的维度和指标可以为 BI 工具提供数据，支持报表分析和可视化展示。

## Cube 支持的数据类型

从模型或数据仓库表中生成的字段类型会统一转为 **通用数据类型（Generic Data Type）**，包括以下类型：

* 字符串（String）
* 布尔值（Boolean）
* 日期（Date）
* 时间（Time）
* 整数（Integer）
* 小数（Decimal）

## 指标与维度（Measures and Dimensions）

如前所述，Cube 通过数据语义建模，帮助你实现更清晰的数据结构设计。在创建 Cube 时，首先需要指定目标数据表。接着，从表中的字段提取 **维度**，并基于这些维度进一步定义 **指标**。

* **维度（Dimensions）**&#x7EF4;度是数据集中不参与聚合的字段，主要用于数据的细分和筛选。\
  它们是指标的描述性属性。例如：`order_status`（订单状态），`payment_method`（支付方式）等，这些维度字段可以用来过滤或分类订单数据。
* **指标（Measures）**&#x6307;标是在模型字段基础上进行聚合计算的结果，通常用于展示关键业务指标或计算分析。例如：`order_count`（订单总数），`average_order_value`（平均订单金额，计算公式为：销售总额 ÷ 订单总数）。指标既可以作为最终的度量指标。

#### 使用示例

定义好 Cube 之后，终端用户可以基于 Cube 灵活构建数据查询。例如，当用户提出问题：“今年每个月的收入是多少？” 可以通过以下方式查询数据：

* **指标（Measures）**：`revenue`（通过对订单金额求和聚合得出）
* **维度（Dimensions）**：`order_date`（按月份粒度分组）

## 创建 Cube

### **方式一：基于当前项目的数据模型（Model）创建**

要创建一个语义层模型（Cube），请按照以下步骤操作：

{% hint style="warning" %}
请先确认引用的数据模型已完成以下操作：

* 已定义字段列表，参考文档详见 [字段列表](/cn-reorc-help-center/shu-ju-jian-mo/zi-duan-lie-biao.md)。
* 已在生产环境对数据模型进行物化，参考文档详见 [建模管道](/cn-reorc-help-center/shu-ju-guan-dao/jian-mo-guan-dao.md)。
  {% endhint %}

1. 进入“语义层”标签页，点击 **+** 按钮，选择 **创建语义模型**。
2. 在弹出的窗口中：
   * 选择数据源（默认当前项目）。
   * 选择你希望创建为 Cube 的数据模型。
   * 点击 **创建** 按钮。

<figure><img src="/files/640lTCWiW6JJpp7QqAhH" alt=""><figcaption></figcaption></figure>

3. 语义模型创建成功后，将显示在 “语义模型” 文件夹下。
4. 在 **字段** 面板中，点击主键字段右侧的“**...**”，然后选择 **设置为主键**。

<figure><img src="/files/eciTjfPeyo7Ufgaqwf3B" alt=""><figcaption></figcaption></figure>

***

### **方式二：通过数据仓库连接创建**

{% hint style="warning" %}
请确保分析数据库的 **生产环境数据连接** 已完成设置，参考文档详见 [项目连接管理](/cn-reorc-help-center/lian-jie/xiang-mu-lian-jie-guan-li.md#she-zhi-fen-xi-shu-ju-ku)。
{% endhint %}

1. 进入 **Cube** 标签页，点击 **+** 按钮，选择 **新建 Cube**。
2. 在弹出的窗口中：

   * 选择 **数据仓库**。
   * 选择你希望创建为 Cube 的数据表。

   点击 **创建** 按钮。

<figure><img src="/files/bOYjycl6DfOEiukXlrb6" alt=""><figcaption></figcaption></figure>

3. Cube 创建成功后，将显示在 **Cube** 文件夹下。
4. 在 **字段** 面板中，鼠标悬停在可以唯一标识 Cube 记录的维度字段上，点击 **...**，然后选择 **设置为主键**。

## 预览 Cube 结果

* 在 **显示设置** 面板中，可以通过点击 **+ 添加**（位于字段区域下方），选择你希望在语义模型中预览的维度和指标。
* 你可以进一步在 **筛选** 区域中添加维度或指标作为过滤条件，并在 **排序** 区域选择需要排序的字段。
* 点击 **预览** 按钮，即可查看已选字段与筛选条件下的 Cube 数据结果。

<figure><img src="/files/xOhbbOCzaR7SxFFV5sWb" alt=""><figcaption></figcaption></figure>

* 根据已选择的字段和条件，对应的 SQL 语句会在 **生成 SQL** 标签页自动展示。

<figure><img src="/files/Eek6ubJb8vrlkKSwA6zc" alt=""><figcaption></figcaption></figure>

***

## 管理 Cube

你可以根据分析主题将 Cube 分类存放在不同的文件夹中，以保持项目结构清晰有序。

创建新文件夹的方法如下：

点击现有文件夹右侧的操作按钮，选择 **添加子文件夹**。

<figure><img src="/files/CDBqjZrp1wX0CT56btbG" alt="" width="339"><figcaption></figcaption></figure>

点击模型右侧的操作按钮，选择 **移动**，然后从列表中选择目标文件夹，将模型移动到其他文件夹

<figure><img src="/files/pvv9Air5MqAgGojkaJoJ" alt="" width="316"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.reorc.com/cn-reorc-help-center/semantics_modeling/yu-yi-ceng-mo-xing-cube.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
