OTBI中实现列匹配并获取关联列值的公式咨询
OTBI报表实现跨行列关联匹配取值
问题场景
现有报表数据如下:
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| 321 | 123 | 124 | |
| 323 | 124 | null | |
| 324 | 125 | null |
需求:用公式填充Column D——当当前行Column C的值与任意行的Column B值匹配时,获取该匹配行的Column A值。例如第1行Column C为124,对应Column B=124的行是第2行,因此Column D需填充323。
已知条件:所有列来自同一表格;Column A、Column B值均唯一;Column C值可与Column B重复(本次按唯一匹配处理)。
之前尝试的问题分析
- 第一种公式仅检查当前行内Column C与Column B是否相等,无法实现跨行列匹配,因此全部返回null:
CASE WHEN "Column C"="Column B" THEN "Column A" ELSE null END
- 第二种公式仅判断Column C是否存在于Column B的集合中,但返回的是当前行的Column A,而非匹配行的目标值:
CASE WHEN "Column C" IN( SELECT "Column B" FROM "TABLE") THEN "COLUMN A" ELSE null END
解决方案
使用标量子查询直接获取匹配行的Column A值,公式如下:
CASE WHEN "Column C" IS NOT NULL THEN (SELECT "Column A" FROM "TABLE" t2 WHERE t2."Column B" = "TABLE"."Column C") ELSE NULL END
原理说明
- 因为Column B的值是唯一的,所以子查询只会返回单个匹配值,符合OTBI对单个值输出的要求。
- 当当前行Column C为null时,直接返回null;否则通过子查询找到对应Column B匹配的行,取出其Column A值填充到Column D。
用这个公式处理示例数据后,第1行Column D会正确填充为323,其余行Column C为null,因此Column D保持null。
内容的提问来源于stack exchange,提问作者TashaK
相关产品推荐
相关产品推荐

