Business Objects 4.x:如何实现类UNION的两查询合并及全量代码展示
Business Objects 合并双查询结果并展示全量代码
你需要实现两个查询的全外连接,从而保留双方所有的Code值,以下是两种可行方案:
方案一:报表层通过合并维度实现(无需Universe权限)
- 把两个查询都导入报表,确保数据管理器中能看到两个结果集
- 合并
Code维度:- 从两个查询中分别拖出
Code到报表同一单元格,系统会自动提示合并,选择「合并」;或右键维度面板的其中一个Code,选「合并」后选中另一个查询的Code
- 从两个查询中分别拖出
- 设置合并维度为全外连接:
- 点击顶部菜单「数据」→「数据提供者」→「编辑合并」
- 在弹窗中找到合并后的
Code维度,将连接类型改为全外连接(Full Outer Join)
- 创建分查询的求和度量:
- 新建变量
Value1:=Sum([Query 1].[Value]) In ([Code]),用于计算Query1中各Code的时长总和 - 新建变量
Value2:=Sum([Query 2].[Value]) In ([Code]),用于计算Query2中各Code的时长总和 - 如需把空值转为0,可修改为
=If(IsNull([Value1]);0;[Value1])、=If(IsNull([Value2]);0;[Value2])
- 新建变量
- 构建报表:
- 拖入合并后的
Code、Value1、Value2到表格 - 添加总计行:对
Value1用=Sum([Value1]),Value2用=Sum([Value2]),即可得到目标报表
- 拖入合并后的
方案二:Universe层创建全联合查询(需编辑权限)
若你有权限操作Universe,可直接在查询阶段合并数据:
- 打开Query1的查询面板,点击「查询」→「添加联合查询」
- 将Query2的查询逻辑复制到联合查询中,确保两个查询的列名、数据类型完全一致
- 选择联合类型为全联合(Full Union),这样会返回两个查询的所有行,包含各自独有的Code
- 回到报表层,创建变量区分两个查询的数值:
- 比如
=If([Query Source]="Query 1";[Value];0)和=If([Query Source]="Query 2";[Value];0)
- 比如
- 按
Code分组对两个变量分别求和,即可生成符合要求的报表
内容的提问来源于stack exchange,提问作者RonaldB
相关产品推荐
相关产品推荐

