---
url: /v6.2/complex-reports.md
---
# 复杂报表

复杂报表集成了 Excel 原生各类编辑操作能力、公式配置化能力，支持多数据源接入，通过可视化拖拽和配置， 用户可快速地在 Excel 界面中实现布局复杂、计算复杂的中国式复杂报表。 同时复杂报表也与平台原有分析能力进行深度融合，支持数据更新同步、数据筛选联动、数据行列权限控制、嵌入场景分析。

复杂报表相比普通表格有以下优势：

* 多数据源：复杂报表可以对多数据源的数据进行分析展示，多数据可以来一个数据库，也可以来自多个数据库。
* 样式多样化：复杂报表的表头支持动态扩展、斜线表头等样式，字段可按行、列进行分组扩展填充，从而实现分组报表、明细报表等多种形式报表。
* 复杂计算：报表行、列字段既能使用 HENGSHI SENSE 自带的高级计算，也支持使用 Excel 公式函数进行计算。

## 新建复杂报表

在仪表盘中点击新建图表->复杂报表，选择数据来源和数据集，点击确定，就创建了一个新的空白的复杂报表。
![](/images/chart/table/complex-reports-001.png)

新建的复杂报表中没有任何数据。与其他报表不同，复杂报表需要打开才能进行编辑。点击右上角的三点菜单，打开复杂报表，进入编辑页面。
![](/images/chart/table/complex-reports-002.png)

## 编辑复杂报表

复杂报表编辑页面分为三部分，最左侧(红色框)是数据区，展示复杂报表使用的数据，中间(蓝色框)是配置区，主要是配置报表相关数据及数据展示形式，右侧是单元格区域，可以设置单元格属性和单元格样式等。 复杂报表编辑完成后点击右上角的预览按钮查看报表展示样式。
![](/images/chart/table/complex-reports-014.png)

### 行列数据展示

将数据在单元格展示时分为两步，首先选中数据在表格中的展示位置，如选择某一单元格，然后拖动需要展示的字段到行、列展示区域。

示例中首先选中 A3单元格，然后拖动`城市`字段为行字段，字段会以行的形式展示。
![](/images/chart/table/complex-reports-003.png)
当拖动`城市`为列字段时，字段会以列的形式展示。
![](/images/chart/table/complex-reports-004.png)

* 默认计算
  新增字段拖入行或列时，系统会按照字段元数据和当前支持的计算项设置默认计算方式，与普通图表一致：维度默认使用分组；度量使用该字段的默认计算方式（例如求和）。日期、时间字段沿用普通图表支持的默认时间分组方式。

* 明细数据
  明细数据是数据集中的详细数据。如需以明细方式展示字段，请在计算中选择“无”。

* 聚合数据
  将字段拖入行或列后，在计算中选择分组，实现了数据聚合展示。如对城市进行分组设置，展示结果如下。
  ![](/images/chart/table/complex-reports-005.png)

> \[!TIP] 默认计算说明
> 上述默认计算只对新拖入行或列的字段生效。已有行列字段的计算配置会保持不变，升级后无需迁移。

> \[!TIP] 提示
>
> 1. 在单元格区域中对配置数据的单元格进行“剪切-复制”时，能够携带配置数据及其他依赖关系。 如图将 A3单元格剪切然后复制到 A8单元格，相应的配置数据也会展示在 A8单元格。
>    ![](/images/chart/table/complex-reports-015.png)
>    2 字段和其绑定单元格的存在一一映射关系，可以快速地将两者进行关联。点击字段时绑定的单元格突显，反之亦然。
>    ![](/images/chart/table/complex-reports-015-1.png)

### 分组依据

#### 字段分组依据

字段拖入复杂报表进行行列数据展示时，不会将它与其他字段进行关联，同一数据集或同一数据模型多个字段拖入，每个字段是独立展示，不带入数据集中的对应关系。如图所示，拖入省份和城市两个字段，它们之间没有联系，随机展示。其实城市与省份是有对应关系的，如杭州属于浙江省，广州属于广东省，展示时需要将它们进行对应展示。

![](/images/chart/table/complex-reports-006.png)

复杂报表中使用分组依据将两个字段建立联系，首先选中待设置的单元格，然后在左侧配置区的单元格中设置该字段依据的分组字段，设置成功后该单元格的字段会依据分组字段进行展示。如将城市按省份进行展示，首先点击城市字段所在的单元格，然后点击左侧配置区的单元格，在分组依据中选择按行组 A3（A3是省份字段所在的单元格）进行分组，数据展示时城市字段按省份进行分组展示。

![](/images/chart/table/complex-reports-007.png)

上述示例中按行组进行分组展示，复杂报表也支持按照列组进行分组展示，某些复杂的情况可能既需要按照行组分组，也需要按照列组分组。如某大型超市各城市门店的销售报表，销售金额按商品类别分别展示。所以计算订单价格即销售金额（黄框），在行组方向上按照 C4（蓝框）进行分组，即按照各个城市分别展示，在列组方向上按照 D3（红框）进行分组，按照商品类别进行展示，最终数据展示结果如右侧黄框所示。
![](/images/chart/table/complex-reports-011.png)

* 同轴内拖入字段时，单元格分组条件支持初始化，默认条件为：`同轴内（行字段/列字段）字段 往上找离该字段最近的 且 计算为分组的字段 作为默认依赖对象`。
* 时间类型字段特殊支持，当时间字段计算为 `分组、毫秒、秒、分、时、天、天（跨周）、天（跨月）、周、月、月（跨年）、季度、季度（跨年）、年` 时，也符合默认条件。
* 调整轴内字段顺序时，分组条件不会跟着字段顺序再进行自动更新。

> \[!TIP] 提示
>
> 1. 选择分组依据不一定要相邻的单元格，只要是当前复杂表格中的单元格都可以作为分组依据。
> 2. 复杂报表支持选择左方和上方的单元格作为分组依据。 如 E4的单元格只能设置 A(1-4)、B(1-4)、C(1-4)、D(1-4)、E(1-3)为分组依据，不能选择 F 列之后的作为分组依据，也不能选择5行以下的作为分组依据，更不能选择自己作为分组依据。
>    ![](/images/chart/table/complex-reports-012.png)

#### 文本分组依据

某些情况下复杂表格中文本内容也需要进行分组依据设置，与其他字段进行关联，随着其他字段的扩展而扩展。

如图所示，在各省份销售数据中‘销售总额’和‘省份合计’是文本信息，但是表头中的 D3{{商品列表.类别}}是字段，会根据字段内容进行扩展，这样‘销售总额’和‘省份合计’也都会随着{{商品列表.类别}}的扩展而变化。

首先我们看一下‘销售总额’，它随着{{商品列表.类别}}的扩展会横向展开，所以在扩展方向中将它设置为横向扩展。

![](/images/chart/table/complex-reports-016.png)

接下来我们看‘省份合计’，省份合计会随着{{商品列表.类别}}进行扩展，如生鲜类会有省份合计，食品类也会有省份合计等。 所以‘省份合计’要跟按{{商品列表.类别}}来分组。

![](/images/chart/table/complex-reports-017.png)

动态扩展的字段{{商品列表.类别}}要在‘销售总额’单元格的范围内展示，所以{{商品列表.类别}}的分组依据要设置为 D2，与‘销售总额’建立联系。

### 数据计算

复杂报表的字段继承了衡石原有的计算能力，支持各种[高级计算](chart-advanced-calculation.md)，同时也支持使用 excel 公式函数进行计算。

如图复杂报表展示各城市销售数据（图中黄色区域），需要计算各城市销售数据总和，此时可使用衡石自带计算能力进行计算（蓝色区域），也可以使用 excel 的 sum 函数进行计算(红色区域)。

![](/images/chart/table/complex-reports-008.png)

> \[!TIP] 提示
>
> 1. 在使用 Excel 函数时，如果对单元格配置的字段进行计算，那么函数公式需要增加`{{}}`，公式对单元格字段展开后的所有数据生效。 如果仅对某个单元格值计算，则不需要增加`{{}}`。
> 2. 复杂报表字段支持的标准 Excel 函数为 Sum, Count, Average, Max, Min, Product, StdDev, StdDevp, Var and Varp.其他的函数暂不支持。

### 多源复杂报表

与其他图表不同，复杂报表支持同时对多个数据源进行展示分析，数据源可以来自同一个数据库也可以来自多个不同的数据库。

如图所示，点击数据模型右侧的`＋`号，添加新的数据，左侧配置表中只展示选中数据模型相关的字段配置信息，如当前选中`进账`模型，展示了`进账`模型中使用的字段，如果要配置或查看`支出`模型中使用的字段，需要点击`支出`模型，切换到支出模型中进行选择字段配置。

![](/images/chart/table/complex-reports-013.png)

### 表头展示

复杂报表的表头从变化的角度可以分为静态表头和动态表头。 静态表头不包含配置数据的字段信息，设定后不会发生变化。 动态表头中包含数据字段信息，会随着字段展开发生变化。下面分别对两种表头进行举例。

#### 静态表头

静态表头由纯文本信息组成，里面不包含字段信息，不会进行动态扩展。表头的单元格数量是固定的。 如图各城市销售数据报表表头编辑时由省市、城市、销售总额三列组成，报表生成时也只有这三列。

![](/images/chart/table/complex-reports-009.png)

#### 动态表头

动态表头指表头中包含字段信息，表头会随着字段展开发生变化。如图各城市销售数据报表需要展示各类商品的销售数据，所以在表头的单元格拖入了商品类别字段，该字段在生成报表时会根据商品类别进行动态扩展，相应的上层标题销售总额也随着商品类别进行动态扩展，这类表头就是动态表头。
![](/images/chart/table/complex-reports-010.png)

动态表头中要注意字段的分组依据，如果字段是在最上层，那么它扩展时不会受到其他单元格限制，如果它上层有其他文本信息，如示例中，动态扩展的字段{{商品列表.类别}}要在‘销售总额’单元格的范围内，所以{{商品列表.类别}}的分组依据要设置为 D2，与‘销售总额’建立联系。

## 复杂报表交互

### 图片设置

复杂报表支持对数据进行图片识别并进行图片展示。可以参照下面的步骤设置图片。

1. 设定展示图片的单元格。示例中选择在 A2单元格展示图片。
2. 拖入数据集的图片信息字段，并在图片展示的单元格中将该字段设为依据字段。示例中在 I2单元格中拖入了图片相关的字段（该列最终不呈现在图表中，后续会隐藏），在 A2单元格的分组依据中设置分组依据为 I2。
3. 在图片设置中勾选显示图片。
4. 图片设置完成，点击预览查看设置效果。

![](/images/chart/table/complex-reports-029.png)

### 二维码设置

复杂报表可以将报表内容生成二维码或条形码，目前支持 QRCode 二维码、PDF417二维码、GS1_128条形码、EAN8条形码、EAN13条形码、Code93条形码、Codabar 条形码其中类型。下面以 QRCode 二维码为列，介绍如何使用二维码设置功能。

设置二维码需要三步。

1. 选择二维码展示的单元格。示例中选择在 A1单元格展示二维码。
2. 拖入展示为二维码的字段，并且在二位码展示的单元格中将展示的内容设置为分组依据。示例中将 C1订单编码进行二维码展示，所以在 A1的单元格分组依据中设置分组依据为 C1。
3. 选择展示的二维码类型。 示例中选择 QRCode 二维码。
4. 二维码设置完成，点击预览查看设置效果。

![](/images/chart/table/complex-reports-028.png)

### 分页

当复杂报表数据内容很多时，可以对复杂报表设置分页展示。每页展示固定页面大小的内容，超出页面大小的内容在下一页展示，用户通过翻页器查看页面的内容。 使用分页功能时需要打开分页开关。

![](/images/chart/table/complex-reports-020-0.png)

分页展示时为了使数据展示更美观、流畅、完整，在分页时支持以下设置。

* 合并单元格跨页显示
* 指定单元格重复显示
* 指定单元格共同显示
* 分页不断开

#### 合并单元格跨页显示

合并单元格被分成两页展示时，一般只在第一页的单元格展示内容，第二页的单元格为空白，如图所示，第二页中红色框内没有数据，在查看数据时可能因为缺少内容而无法理解，需要翻看到上一页获取合并单元格的内容。

![](/images/chart/table/complex-reports-020.png)

复杂报表支持合并单元格跨页显示，即合并的单元格跨页时在每一页都显示内容。上述示例中“江苏省”及相应的“省份汇总”设置合并单元格跨页显示后，每一页都会展示数据。首先选中单元格 B4{{订单.省份}}（红框），然后在分页设置中勾选合并单元格跨页显示。对按省份汇总的订单价格（蓝框）也进行同样设置。预览效果如图所示，单元格“江苏省”及相应“省份汇总”在每一页都展示数据。

![](/images/chart/table/complex-reports-021.png)

#### 指定单元格重复展示

指定单元格重复展示是指某些单元格在页面重复展示，常用于表头或表尾的说明信息。 如图所示，学生成绩表分页展示时希望在每页都展示表头和说明信息，所以在表头单元格 B2（红色框）进行分页设置，设置它跟随单元格 B5（蓝色框）进行展示，即每一页展示学生成绩时，该页都展示表头。 同样的对说明信息单元格 B7也进行分页展示设置，设置它跟随单元格 B5进行展示，即每一页展示成绩时，该页都会展示说明信息。

![](/images/chart/table/complex-reports-018.png)

设置后的分页效果如图所示，每一页都展示了表头和说明信息。

![](/images/chart/table/complex-reports-019.png)

#### 指定单元格共同显示

报表进行分页展示时，数据超过系统指定页面大小时就会被分开，某些关联的数据也会被分成两页展示，在某一页可能存在孤行的情况，数据信息就断开了。 如图所示，报表展示了各城市门店商品销售情况，在报表展示过程中，“杭州”城市和其下面的门店分成两页展示。

![](/images/chart/table/complex-reports-026.png)

为了使城市及其所属门店一同展示，对城市所在的单元格 B3进行分页设置，设置其与单元格门店 B4共同显示。设置后城市“杭州”不是单行展示，与其所属门店展示在一起。

![](/images/chart/table/complex-reports-027.png)

#### 分页不断开

报表分页过程中，有些完整的信息会被分成两块，这种情况下可以使用分页不断开的进行设置，将完整的信息放在一起进行展示。 如图某单位工资单展示，希望每个员工的信息能够完整展示在一页中，不因分页断开。在表头 C6（红色框）中进行分页设置，设置从表头 C6到工资明细展示结束行尾 F13（蓝色框） 不断开。
![](/images/chart/table/complex-reports-022.png)

在未设置分页不断开时员工“晏熠其”的信息被分成两页展示，设置后员工“晏熠其”的信息完整地展示在了第二页。

![](/images/chart/table/complex-reports-023.png)

> \[!TIP] 提示
> 分页不断开需要选择所有不断开的单元格数据，设置的是展示单元格的范围值。上述示例中，设置的不断开范围是从 C6：F13。 如果仅有一行数据就设置整行。

### 打印

复杂报表支持打印功能。

> \[!TIP] 6.2 版本更新
> 复杂报表在\*\*创作态（设计页面）\*\*增加打印功能，报表制作人员可以在配置过程中随时校验排版效果，无需切换到预览态或发布态。

应用集市中打开报表在右下角有打印按钮，可以点击按钮进行打印。

![](/images/chart/table/complex-reports-024.png)

在打印页面可以设置打印页数、页面、页边距、**页眉/页脚**、工作表，点击打印会弹出打印弹窗，设置打印机进行打印。

> \[!TIP] 6.2 版本更新
> **页眉页脚自定义**：用户可灵活定义页面顶部与底部的信息展示，在报表的每一页自动插入标题、页码、打印时间等内容。

![](/images/chart/table/complex-reports-025.png)

## 复杂报表发布

复杂报表在发布态支持数据筛选、排序、列隐藏、编辑、插入、复制等操作。

![](/images/chart/table/complex-reports-030.png)

## 与其他控件交互

复杂报表暂不支持与其他控件进行交互。

## 复杂表格的计算过程

复杂表格分两层计算：第一层是衡石的 HQL 计算，第二层是表格模板的渲染计算。第二层渲染依赖第一层计算的结果，因此排序功能主要由第一层计算决定。

### 第一层：HQL 计算

复杂表格支持多个主数据集，模板配置也支持复杂的单元格分组依据配置。第一层计算的整体流程如下：

1. **按主数据集分隔**：首先根据主数据集进行分隔，每个主数据集单独计算。

2. **按分组依据划分计算组**：每个主数据集的所有轴根据分组依据分成一个或多个独立的计算组。

3. **各计算组的处理方式**：
   * **明细的独立计算组**：没有任何聚合运算，直接把相关字段的查询结果交给表格模板渲染。
   * **聚合的独立计算组**：根据指标进行子分组：
     * 每个指标根据分组依据找到自己的维度列表，维度完全相同的一个或多个指标合并到一个 HQL 查询中计算得出。
     * 剩下没有指标的全部维度放在一个独立的 HQL 查询中计算得出。
     * 上述所有 HQL 查询结果根据维度进行最终的 inner join，汇总后的结果再交给表格模板渲染。

### 排序规则

对于聚合的独立计算组，排序由以下规则决定：

* 指标查询的维度按照模板配置中维度放入的顺序排列，维度排序也遵循该顺序：先放入的维度具有更高的排序优先级，后放入的维度作为次要排序，依此类推。
* **第一个指标的排序优先**，其他指标根据第一个指标的数据顺序来 join，不单独影响最终排序。
* 第一个指标的维度排序：先放入的维度先参与排序。

### 配置建议

理解上述计算过程，有助于根据实际需求配置出合理的表格模板：

* 若需控制报表的排序结果，应关注维度在模板中的配置顺序——先配置的维度排序优先级更高。
* 确认哪个指标被设为第一个指标，因为整体排序以第一个指标的维度顺序为准。
* **分组依据建议从大到小链式设置**：分组依据同时具有 HQL 语义（影响计算分组，决定生成几个查询）和模板语义（影响渲染的展开方式与速度）。不合理的分组依据会导致计算组被拆散、查询数量增多、渲染变慢。建议尽量将同一层级链路上的维度和指标串联成一条完整的依赖链，从粒度最大的维度到粒度最小的维度，再到各指标，依次设置分组依据。

  **推荐配置**（以"人员及其个人指标"为例，人员有姓名、所在城市、省份、国家等层级信息）：

  ```
  国家 ← 省份 ← 城市 ← 姓名 ← 各种个人指标
  ```

  **不推荐配置**（将姓名与各上级维度拆开，形成多条平行依赖链）：

  ```
  姓名 ← 各种个人指标
  姓名 ← 国家
  姓名 ← 城市
  姓名 ← 省份
  ```

  不推荐的原因：后者会把原本可以合并的计算组拆成多个独立查询，增加 HQL 查询次数，同时模板渲染时需要对更多独立结果进行关联，影响性能。

### 计算资源与内存控制

以下配置适用于 6.2 版本。数据库取数、聚合结果 join 和模板展开是不同的阶段；取数和 join 的行数限制不等于模板展开后的最终行数限制。

| 配置项 | 默认值 | 作用 |
| --- | --- | --- |
| `COMPLEX_TABLE_DB_QUERY_LIMIT` | `500000` | 单次数据库查询的行数限制。 |
| `COMPLEX_TABLE_JOIN_LIMIT` | `500000` | 聚合查询结果进行 join 时，单次 join 结果的最大行数。 |
| `COMPLEX_TABLE_TEMPLATE_SUBPROCESS_ENABLED` | `false` | 是否使用独立 JVM 子进程渲染模板；默认在 Web JVM 内渲染。 |
| `COMPLEX_TABLE_TEMPLATE_MAX_HEAP_MB` | `500` | 启用子进程渲染后，每个子 JVM 的最大 Java 堆内存，单位 MB，须为正整数。 |
| `COMPLEX_TABLE_TEMPLATE_MAX_CONCURRENT_PROCESSES` | `6` | 单个 Everest 实例同时运行的渲染子进程数上限，须为正整数。 |

`COMPLEX_TABLE_JOIN_LIMIT` 须为正整数。join 结果超过上限时，当前计算失败并提示“数据膨胀过大”，不会截断后返回部分结果；等于上限时允许通过。遇到该提示，应优先缩小数据范围或优化分组依据，避免直接提高上限带来更大的内存压力。关闭子进程渲染不会关闭 join 行数保护。

#### 按需启用模板渲染隔离

仅在客户存在复杂表格渲染内存问题时，由管理员手动将 `COMPLEX_TABLE_TEMPLATE_SUBPROCESS_ENABLED` 设为 `true`。启用后，有数据源的模板每次渲染使用一个独立 JVM 子进程，完成后退出；没有数据源时跳过模板渲染，不启动子进程。进程启动和数据交换会增加开销，小模板的响应可能变慢。

管理员需在后端服务的启动环境中配置并重启服务。Linux 安装包可在 `conf/hengshi-sense-env.sh` 中加入以下配置；其他部署方式设置等价的服务环境变量：

```sh
export COMPLEX_TABLE_TEMPLATE_SUBPROCESS_ENABLED=true
export COMPLEX_TABLE_TEMPLATE_MAX_HEAP_MB=500
export COMPLEX_TABLE_TEMPLATE_MAX_CONCURRENT_PROCESSES=2
```

示例并发数 `2` 是 8GB 容器或虚拟机的起始建议，不是默认值。总内存为 16GB 及以上可从默认并发数 `6` 起步；8GB 建议显式设为 `2` 或 `3`，再按实际模板和并发负载的峰值调整。恢复进程内渲染时，将开关设为 `false` 并重启服务。

> \[!WARNING] 内存规划
> 最大堆内存只限制 Java 堆，不是子进程总物理内存上限。按容器或虚拟机的实际共享内存限额，预留 Web JVM 的堆与堆外内存、各渲染子进程的堆与堆外内存、最多一个额外 AppCDS 准备子进程和操作系统开销；多个 Everest 实例共享限额时应合并计算。上述并发建议不保证不会发生内存不足。

子进程的排队、首次渲染包安装锁等待和执行共享动态配置 `he-query-config` 中 `complexTableProcessLimit` 的一次超时预算，单位为秒。子进程启动失败、内存不足、等待或执行超时等情况提示“表格模板渲染失败”。应结合服务日志检查数据规模、堆内存、并发和超时配置。

独立渲染包的部署及 AppCDS 归档准备、校验和复用由系统自动完成，无需手工安装或生成归档；AppCDS 不可用时仍可使用普通 jar 进行子进程渲染。可通过 `GRAPECITY_GCEXCEL_FONTS_PATH` 指定仅含模板所需字体的目录，保留必要的中文和回退字体；调整字体后应检查布局、分页及导出效果。

## 复杂表格（复杂报表）的使用限制和注意事项：

1. 行数限制不生效：系统设置限制表格导出数据行数的设置，在复杂表格中不会生效。因为复杂表格支持多个数据表经过模板渲染后得出结果，一般针对单个表格的导出行数限制在这里意义不相同，暂不支持这个限制应用于复杂表格。
2. 数据源与 join 行数限制：单次数据库查询和聚合结果的单次 join 默认各限制为 50 万行，分别由 `COMPLEX_TABLE_DB_QUERY_LIMIT` 和 `COMPLEX_TABLE_JOIN_LIMIT` 控制。这些限制不等于模板展开后的最终行数限制，详见[计算资源与内存控制](#计算资源与内存控制)。
3. 展示格式的设置：展示格式在单元格中设置，与其他图表在轴中设置是不一样的。
4. 导出中文乱码问题：如果导出pdf或者excel中文显示乱码，需要服务器安装对应的中文字体，并设置GRAPECITY_GCEXCEL_FONTS_PATH配置项指向字体所在位置的父路径。
5. 不支持模板跨源计算：不支持多个数据源通过模板公式的方式来跨数据源计算，有此类需求需要先在数据集层面合成一个数据源，然后再给复杂表格使用。
6. 打印整体边框：打印复杂表格会有一个整体的边框，如果不需要，建议下载数据后再打印。
7. null值显示问题：null进入模板会变成一个奇怪的数字，有时候还会引起浏览器卡死，建议在数据渲染前做替换，比如数据集的null值替换。
8. 分页下条件格式失效：分页开启后，条件格式会失效，此场景建议不要开启分页。
9. 分页下识别二维码失效：分页开启后，识别二维码会失效，此场景建议不要开启分页。
10. 分页下识别图片失效：分页开启后，识别图片会失效，此场景建议不要开启分页。
11. 分页下双等号公式模板失效：分页开启后，双等号公式模板（例如`{{==round(B8-C8,2)}}`）会失效，此场景建议不要开启分页。
12. 不支持文本和日期非分组聚合：文本和日期类型在复杂表格的轴中只能做分组计算，不能做max等聚合计算：这种配置方式会导致显示异常，建议在数据集中做好聚合，然后以明细的方式做复杂表格渲染。
13. 只能有一个Sheet：目前只支持模板有一个Sheet，不支持多个Sheet。
14. 明细和聚合数据是单独计算的：复杂表格的轴，如果一个是明细，另一个是聚合计算，那么，他们其中一个是不应该设置为对方的分组依据的，设置了也不会生效。
15. 导出Excel会导致二维码和图片失效，因为二维码生成和图片URL识别是复杂表格的功能，而不是Excel的功能。
