Quick BI探索空间上传excel关联创建的数据集,新建计算字段用到内置函数BI_CONTAINS(string, substring)报错“ DB::Exception: Illegal type (String) of 2 argument of function and: While processing multiIf(”
问题描述
数据集是由探索空间中上传的2个excel进行字段左关联创建的。

数据集中新建计算字段用到内置函数BI_CONTAINS(string, substring)报错。报错如下:
数据源执行SQL失败 java.lang.RuntimeException: SQL execute error by datasource... ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: , port: 25140; Code: 43. DB::Exception: Illegal type (String) of 2 argument of function and: While processing multiIf((COL_18 = '13%') AND (A03_T_2_.COL_3 = '内部公司'), '串链业务', COL_18 = '13%', '贸易业务', (COL_18 = '9%') AND if(positionUTF8(COL_12, '物流') > 0, 'true', 'false'), '物流业务', COL_18 = '9%', '贸易业务', COL_18 = '6%', '服务', '其他') AS T_AC8_3_. (ILLEGAL_TYPE_OF_ARGUMENT) (version 22.8.5.29) ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.getException(ClickHouseExceptionSpecifier.java:91) ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:55) ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier.specify(ClickHouseExceptionSpecifier.java:28) ru.yandex.clickhouse.ClickHouseStatementImpl.checkForErrorAndThrow(ClickHouseStatementImpl.java:875) ru.yandex.clickhouse.C...

计算字段如下:
CASE
WHEN [税率] = '13%' AND [客户分类] = '内部公司' THEN '串链业务'
WHEN [税率] = '13%' THEN '贸易业务'
WHEN [税率] = '9%' AND BI_CONTAINS([货物或应税劳务名称], '物流') THEN '物流业务'
WHEN [税率] = '9%' THEN '贸易业务'
WHEN [税率] = '6%' THEN '服务'
ELSE '其他'
END问题原因
探索空间中数据库是ClickHouse,BI_CONTAINS函数会返回"true"/"false",ClickHouse不支持 and 后面拼字符的语法,所以报错了。
解决方案
将计算字段中BI_CONTAINS([货物或税务名称], '物流')修改为:
BI_CONTAINS([货物或税务名称], '物流') = 'true'
修改后计算字段修改如下:
CASE
WHEN [税率] = '13%' AND [客户分类] = '内部公司' THEN '串链业务'
WHEN [税率] = '13%' THEN '贸易业务'
WHEN [税率] = '9%' AND BI_CONTAINS([货物或应税劳务名称], '物流')='true' THEN '物流业务'
WHEN [税率] = '9%' THEN '贸易业务'
WHEN [税率] = '6%' THEN '服务'
ELSE '其他'
END适用于
Quick BI专业版6.0.3