---
order: 2
navTitle: 单元格取数
---
# 单元格取数

在报表设计器中引入[数据模型](../../../data-gov/GLOSSARY.md#data-model)后，就可以正式开始制作报表了。报表最核心功能是将[数据表](../../../data-gov/GLOSSARY.md#data-table)的数据以表格的形式展示出来，接下来本文将重点围绕取数来介绍。

## 浮动单元格{#set-float}

在报表中使用浮动设置将[数据表](../../../data-gov/GLOSSARY.md#data-table)中满足条件的数据展示在结果页面，数据表返回的结果集是一个二维数组，该数组中的每一个元素对应报表结果页面的一个单元格。

![浮动示例](./images/2021-12-06-09-38-32.gif)

浮动有如下几个概念需要了解：

- **浮动主单元格**：浮动主单元格是浮动的核心，浮动的设置是在该单元格上设置的。例如展示各个省份的销售数量，则这里的`省份`为浮动主单元格
- **浮动方向**：浮动的方向分为两个，分别是向下扩展和向右扩展。向下扩展即为纵向浮动，向右扩展为横向浮动
- **浮动区域**：浮动的扩展范围。在浮动区域内的行列，会跟随浮动主单元格一起根据浮动方向扩展。在**浮动主单元格**上设置的过滤条件，浮动区域内的单元格均会继承该过滤设置

浮动设置可以做分组查询和明细数据查询，两者区别如下：

- [分组查询](#float)：将满足条件的数据按照浮动维度进行分类汇总，相当于sql语句中的group by
- [明细数据查询](#queryselect)：查询结果的每条数据，均对应于数据库表原始行的一条数据。适用于查询数据清单场景

如何设置分组查询和明细数据查询，可以查看如下章节内容。

### 查询分组{#float}

以制作各省销售情况表为例，操作步骤如下：

![浮动操作](./images/set-float.gif)

示例地址：[单向浮动表](https://demo.succbi.com/v5/demo/单向分组)

- **设置浮动主单元格和浮动方向**：
  - 方法一：从数据模型列表处，展开【门店】，将【省】拖拽到`A5`单元格中。通过该方法设置的浮动单元格，会根据当前设计器的表格布局自动设置浮动方向，浮动范围为整行
  - 方法二：选中单元格`B5`，点击**工具栏**>**浮动**下拉选择`纵向浮动`
- **改变浮动范围**：选中浮动主单元格`A5`后，橙色边框圈出了浮动区域，鼠标移至橙色边框处，会出现箭头图标，拖动即可修改浮动范围

:::tip 浮动更多说明

- 浮动主单元格有一个蓝色箭头图标，箭头的方向即为浮动方向
- 当拖入维度到报表设计器中时，系统会根据拖入目标单元格的上侧/左侧单元格设置情况，来决定是否自动将目标单元格设置浮动主单元格及浮动范围。
  :::

### 查询明细数据{#queryselect}

查询数据清单时可以使用查询明细数据功能，设置后显示的每条数据都对应于数据库表原始行的一条数据。查询明细数据和分组表查询的区分在于二者对计算结果的处理规则不同：

- **查询明细数据**：将满足条件的原始行数据全部显示出来
- **分组查询**：将满足条件的数据按照浮动维度进行分类汇总，相当于sql语句中的group by

如展示企业基本信息列表，操作步骤如下：

1. 选中[浮动单元格](#set-float)，如`B4`
2. 在右侧**属性栏**>**单元格**>**浮动**分组下，勾选**查询明细**即可实现

![设置查询明细](./images/2021-11-18-17-12-13.png)

示例地址：[明细分页表](https://demo.succbi.com/v5/DEMO/app/DEMO.app?id=%E6%98%8E%E7%BB%86%E5%88%86%E9%A1%B5%E8%A1%A8&:play=true)

### 设置合并连续单元格{#merge-cell}

示例地址：[合并连续单元格](https://demo.succbi.com/v5/demo/合并连续单元格)

### 补全维项{#fill-dimension}

补全维项可以将没有数据的维项也在报表中展示出来。例如事实表中只有`上装`、`下装`的销售数据，没有`套装`的数据，希望在报表中将所有类型都显示出来，就可以用补全维项将所有维项展示。**补全维项**只能在[浮动主单元格](#set-float)上进行设置。

![补全维项](./images/2021-12-14-14-25-33.gif)

1. 选中上下装指标的单元格
2. 在**单元格**-**浮动**处勾选**补全维项**

### 过滤不在维项中的数据{#filter-dimension}

过滤不在维项中的数据可以过滤掉维表中不存在的维项数据。例如事实表的【上下装】字段中，有编码为`02`和`99`的数据，但在上下装维表中不存在编码为`99`的维项，如果只希望展示维表中存在的维项，就可以使用该功能过滤掉不在维表中的数据。**过滤不在维项中的数据**只能在[浮动主单元格](#set-float)上进行设置。

![过滤不在维项中的数据](./images/2021-12-14-14-39-45.png)

## 条件单元格{#conditioncell}

当设置某个单元格为条件单元格后，在固定范围内的其他单元格均会继承其在过滤器上设置的过滤条件。设置操作步骤如下：

![设置条件单元格](./images/conditioncell-how.gif)

示例地址:[分省销售情况表](https://demo.succbi.com/v5/DEMO/ana/报表/分组报表/固定分组交叉.rpt?:edit=true)

1. 选中需要设置的单元格，如`E4`
2. 点击**工具栏**>**条件**图标，按需调整固定范围
3. 在过滤器中按需添加过滤条件，如价格档位为`高档`

::: tip 条件单元格说明

- **条件单元格标识**：`E4`单元格有一个漏斗图标，表示`E4`单元格为**条件单元格**，固定范围是从`E4-E6`（橙色边框高亮出这片区域）
- **过滤条件继承**：`E4`单元格上有过滤条件，则该固定范围内的单元格均会继承该过滤条件
  :::

## 过滤{#filter}

过滤是对报表中计算的数据进行限制和筛选，将满足过滤条件的数据显示到计算结果中。当选中某个单元格或工作表后可对其设置过滤条件和筛选条件。提供了2种过滤类型：

- 过滤器：对原始数据行进行过滤，过滤出符合条件的数据，类似于SQL中的where条件
- 筛选器：对结果集进行筛选，类似于SQL中的having条件，只能对[浮动主单元格](#set-float)进行筛选

示例地址：[数值分段表](https://demo.succbi.com/v5/DEMO/ana/报表/分组报表/钻取子表/数值分段表.rpt?:edit=true)

![过滤](./images/2021-12-15-11-34-31.png)

过滤条件存在继承关系，如下设置中，由上到下依次继承：

- **模型表**：右键模型表可对模型表设置过滤条件，作用范围为所有引用模型表的地方
- **工作表**：选中空白处可设置工作表的过滤条件，作用范围为整个工作表
- **浮动主单元格**：选中[浮动主单元格](#set-float)可设置浮动的过滤条件，作用范围为整个浮动
- **条件主单元格**：选中[条件主单元格](#conditioncell)可设置条件单元格的过滤条件，作用范围为整个条件范围
- **单元格**：选中单独的单元格可设置单元格的过滤条件，作用范围为单个单元格

::: tip

报表的过滤设置与仪表板的过滤设置操作基本一致，具体设置可查看[过滤](../../../data-viz/dash/design/data/data-filter/README.md)文档，但报表中不支持拖拽字段到[过滤器](../../../data-viz/dash/design/data/data-filter/README.md#过滤器)或[筛选器](../../../data-viz/dash/design/data/data-filter/README.md#筛选器)中

:::

[//]: # "选中单元格，在**单元格**中设置过滤器和筛选器。需要说明单元格、固定、浮动、工作表等条件的继承关系。"

## 排序{#sort}

报表提供了排序的功能，可以按照指定字段排序展示数据，以按各省销量降序展示销售情况为例，操作如下：

选中`A5`单元格，在右侧**属性栏**>**单元格**>**排序**下， 点击**添加**按钮，在弹出的排序对话框中按需添加排序字段

1. 点击**添加**按钮下拉选择`字段`选项
2. 分别选择`销售数量`、`降序`、`总计`

即可实现按`销售数量`降序展示数据。可以设置多个字段的排序，排序优先级是根据排序字段添加顺序依次生效，按照上述步骤继续添加字段即可实现。

![排序设置](./images/sort.gif)

示例地址：[单向分组排序表](https://demo.succbi.com/v5/demo/单向分组)

### 排序属性介绍{#sort-attr}

在弹出的排序对话框中，可以指定多个字段依次，也可以添加动态表达式：

- **字段**：
  - 排序依据：选择数据模型中的字段作为排序字段
  - 排序方式：按照排序依据选择字段进行`升序`或者`降序`排列数据
  - 聚合方式：指定排序依据字段的聚合方式。当为\[明细查询]{#query-select}时，不能指定聚合方式
- **表达式**：可以编写表达式作为数据的排序依据，如`${[下拉框2].[值]} ${[选择面板1].[值]}` 第一个值为排序依据，第二个值是排序字段
  - 分组表：需要三个动态参数，分别为排序依据、排序字段、聚合方式
  - 明细表：需要两个动态值，分别为排序依据、排序字段

示例地址：[表达式动态排序](https://demo.succbi.com/v5/DEMO/ana/%E6%8A%A5%E8%A1%A8/%E6%B8%85%E5%8D%95%E6%8A%A5%E8%A1%A8/%E6%98%8E%E7%BB%86%E5%88%86%E9%A1%B5%E8%A1%A8.rpt?:edit=true)

### 点击列标题排序{#sort-title}

报表中也可以在单元格列标题上设置排序，即可在查看界面点击列标题上的**排序按钮**，使当前列的指标数据在升序、降序或不排序三种状态之间切换。排序按钮以图标形式显示当前排序状态。

只需在设计器选中对应列标题，在**属性栏**>**单元格**>**排序**中勾选**点击列头排序**，并设置相关属性即可：

![点击列标题排序](./images/2021-12-23-11-21-44.png)

- **排序单元格**：
  - 自动：按照正下方浮动区域的单元格排序，若有嵌套浮动，则按照最上层单元格排序
  - 自定义：可手动输入浮动区域的单元格进行排序，如`B5`
- **默认排序**：设置点击排序按钮后首次的排序方式，提供**升序**、**降序**两个选项
- **允许无排序**：不勾选，排序按钮只会在升序、降序两种状态间切换，勾选后，会增加**不排序**状态，即在三种状态之间切换

:::tip 更多说明

1. 列标题排序只会让浮动区域的单元格生效，如下方没有浮动单元格，也会显示排序按钮，但点击无效
2. 当浮动单元格上设置了默认的[字段排序](#sort)后，点击列标题排序，会以当前列标题指标优先排序
3. 同时只有一个列标题指标排序能生效，当依次点击多个列标题排序时，只生效当前点击的一个
   :::

示例地址：[点击列标题排序](https://demo.succbi.com/v5/demo/单向分组)

## 更多设置{#more}

[//]: # "包括显示模式、提示等。"
