1. 概述
1.1 应用场景
希望根据多列数据生成多级序号。
例如,根据部门、岗位两列数据生成二级序号,如下图所示:
1.2 实现思路
1)获取第一列数据当前值在当前列数据去重后的序号。
2)获取第二列数据当前值在当前分组内数据去重后的序号。
3)对分别获取到的序号进行拼接。
2. 示例
2.1 新建模板
新建一张普通报表,如下图所示:
2.2 准备数据
新建数据库查询 ds1,输入 SQL 查询语句:SELECT * FROM 部门,如下图所示:
2.3 设计报表
1)B1、C1 单元格输入文本,B2、C2 单元格拖入相应的字段,如下图所示:
2)B2 单元格的数据设置为「列表」,如下图所示:
2.4 插入层次坐标
1)A1 单元格输入文本,A2 单元格插入公式:INARRAY(B2,UNIQUEARRAY(B2[!0]))+"."+INARRAY(C2,UNIQUEARRAY(C2[!0]{B2=$B2})),如下图所示:
2)公式说明如下表所示:
公式 | 说明 |
---|---|
B2[!0] | 返回 B2 单元格扩展出来的所有数据 |
UNIQUEARRAY(B2[!0])) | 对 B2 单元格扩展出来的所有数据去重,返回唯一值数组 |
INARRAY(B2,UNIQUEARRAY(B2[!0]) | 返回当前 B2 单元格数据在唯一值数组中位置索引,即一级序号 |
C2[!0]{B2=$B2} | 返回 C2 单元格扩展出来的同一分组内的数据 |
UNIQUEARRAY(C2[!0]{B2=$B2}) | 对 C2 单元格扩展出来的同一分组内的数据,返回分组内唯一值数组 |
INARRAY(C2,UNIQUEARRAY(C2[!0]{B2=$B2})) | 返回当前 C2 单元格数据在分组内唯一值数组中的位置索引,即二级序号 |
INARRAY(B2,UNIQUEARRAY(B2[!0]))+"."+INARRAY(C2,UNIQUEARRAY(C2[!0]{B2=$B2})) | 将两级序号用 . 连接 |
3)A2 单元格的左父格设置为 B2 单元格,如下图所示:
2.5 效果预览
1)PC端
保存并预览报表,效果如下图所示:
2)移动端
同时支持 App 和 HTML5 端预览,效果如下图所示:
3. 模板下载
点击下载模板:多级序号.cpt
4. 注意事项
1)如果有第三列数据 (D2) 也要生成序号,则 A2 左父格为 C2 ,公式为:INARRAY(B2,UNIQUEARRAY(B2[!0]))+"."+INARRAY(C2,UNIQUEARRAY(C2[!0]{B2=$B2}))+"."+INARRAY(D2,UNIQUEARRAY(D2[!0]{B2=$B2&&C2=$C2}))
2)如果有第四列数据 (E2) 也要生成序号,则 A2 左父格为 D2 ,公式为:INARRAY(B2,UNIQUEARRAY(B2[!0]))+"."+INARRAY(C2,UNIQUEARRAY(C2[!0]{B2=$B2}))+"."+INARRAY(D2,UNIQUEARRAY(D2[!0]{B2=$B2&&C2=$C2}))+"."+INARRAY(E2,UNIQUEARRAY(E2[!0]{B2=$B2&&C2=$C2&&D2=$D2}))
3)如果需要生成更多的多级序号,实现方法以此类推。