Description
Root Cause
校验的信息扩展到了整个模型上,因此只要出现了列名和度量名一样的情况下,用户就无法导出 TDS,这样对原来的产品行为破坏性挺大;但如果不对重名的问题进行校验,那么就可能导出用户无法打开的 TDS 文件,两种处理方式都比较极端,因此需要考虑一个更为折中的方案来处理重名问题。
Dev Design
根据定义,需要在校验的时候就知道导出的级别是什么,根据导出的级别来进行校验:
- 如果导出级别是 AGG_INDEX_COL 那么只会对聚合索引用到的维度和度量信息进行校验;
- 如果导出级别是 AGG_INDEX_AND_TABLE_INDEX_COL 那么会对索引用到的维度和度量信息进行校验;
- 如果导出级别是 ALL_COLS 那么会对模型上所有可用的列以及度量进行校验;
- 如果级别是 CUSTOM_COLS 那么会结合用户传入的 dimension 和 measures 进行校验(目前前端没有这个功能,一个叫 bi_export 的API 有这个能力和 KE 前端不是同一接口)。
相应地,前端需要将这个导出级别参数传递到后端,这个参数后端会做一个可选参数,如果不填,默认就是 AGG_INDEX_COL。前端之所以要做分开校验是基于下载 TDS 走的是浏览器下载的一个调用,与我们常规的 API 请求存在差异,这种调用无法获取到 API 请求的结果。因此,内部使用的 API 不再在导出的接口中校验,但是 OpenAPI 会保留校验逻辑。