BI4.3中生成sql与BI分析表中书写条件存在差异

5868
7

jiangss 初学数据Lv2

发表于2018-8-14 14:08

悬赏1

已解决

楼主
1)主题表报表期设置:A表数据期字段bbq:6位(年月),B表数据期load_date:8位(年月日)
2)在BI分析表关联关系中设置,A表和B表内连接,连接表达式:A表.CONT_NO=B表.CONT_No and left(A表.load_date,6)=left(A表.load_date,6)
3)在BI分析表制作中,设置报表参数@bbq 为日期型(年月日),计算时选择'20180813'
4)BI分析表 A列依据A表.dept_no 浮动,B列取值为:=if(A表.five_type='01',B表.balance,0)
5)在数据期条件或过滤条件中写:B表.load_date=@bbq

而在计算时,生成的sql里会有:A表.load_date='20180813',而没有B表.load_date='20180813' ,可是条件里明明写的是B表.load_date=@bbq?

最近看过此主题的会员

v笑向前走

esen_4ZY2513DM2

esen_50D7QWCETO

POLARIS

esen_4ZMU7ZDMZ2

esen_4ZJ8RP7VB1

esen_4XMY0N6IMU

esen_4XF8DAA5ZU

wxw

wuq

18282474942

hhdtest

ssssssss

最佳答案
jiangss 发表于 2018-8-14 14:17
可是条件中并未写A表.load_date=@bbq 呀,写的是B表.load_date=@bbq,sql为什么会使用A.load_date呢? ...

当遇到了这类问题,第一时间我们就应该想到一致性维度规则。
我们先了解下一致性维度规则:
一致性维度规则
当主题表A中字段zb1和主题表B中字段zb1构成了一致性维度,则程序会认为A表的zb1等同于B表的zb1,
1.出于优化sql的考虑,程序会尽量减少表间的关联,而在解析维和过滤条件的表达式时尽量从当前表取字段;
2.如果不能避免表间关联,则解析维和过滤条件的表达式时,优先从主源表取字段,主源表中找不到,才会从指定的表取。
注,"维"是指报表展示角度,即浮动表元或者固定维表元等
3.不同主题表中的字段如何构成一致性维度
比较其"名称"、"别名"、"标题"、"对应维"等信息,如果大部分信息一致,则认为他们构成了一致性维度,是相同的。特别需要注意,"对应维"权重很大,一旦这个属性相同,则认为不同主题表中的这两字段构成了一致性维度。
7个回答

只看楼主

方菁 小试身手Lv3

发表于2018-8-14 14:14

只看该作者

取消 关注该作者的回复

沙发

因为A表和B表做了关联关系,所以直接针对A表进行了过滤。

jiangss 初学数据Lv2

发表于2018-8-14 14:17

只看该作者

取消 关注该作者的回复

板凳

方菁 发表于 2018-8-14 14:14
因为A表和B表做了关联关系,所以直接针对A表进行了过滤。

可是条件中并未写A表.load_date=@bbq 呀,写的是B表.load_date=@bbq,sql为什么会使用A.load_date呢?

方菁 小试身手Lv3

发表于2018-8-14 14:08

只看该作者

取消 关注该作者的回复

地板

jiangss 发表于 2018-8-14 14:17
可是条件中并未写A表.load_date=@bbq 呀,写的是B表.load_date=@bbq,sql为什么会使用A.load_date呢? ...

当遇到了这类问题,第一时间我们就应该想到一致性维度规则。
我们先了解下一致性维度规则:
一致性维度规则
当主题表A中字段zb1和主题表B中字段zb1构成了一致性维度,则程序会认为A表的zb1等同于B表的zb1,
1.出于优化sql的考虑,程序会尽量减少表间的关联,而在解析维和过滤条件的表达式时尽量从当前表取字段;
2.如果不能避免表间关联,则解析维和过滤条件的表达式时,优先从主源表取字段,主源表中找不到,才会从指定的表取。
注,"维"是指报表展示角度,即浮动表元或者固定维表元等
3.不同主题表中的字段如何构成一致性维度
比较其"名称"、"别名"、"标题"、"对应维"等信息,如果大部分信息一致,则认为他们构成了一致性维度,是相同的。特别需要注意,"对应维"权重很大,一旦这个属性相同,则认为不同主题表中的这两字段构成了一致性维度。

wuq 初学数据Lv2

发表于2018-8-14 15:07

只看该作者

取消 关注该作者的回复

5#

一般一致性维度的问题可以通过修改分析表改变主源表或冗余一个维度,修改其名称,让两个主题表对应的维度名称不一样来解决

wuq 初学数据Lv2

发表于2018-8-14 15:10

只看该作者

取消 关注该作者的回复

6#

解决方法:
方案一:先试试将B列设置为指标,在B列的数据期条件里写B表.load_date=@bbq;
方案二:将浮动维后一个表元设置为B表的任意一个表元(这样做的目的是将主源表设置为B表)
方案三:在主题表里对应的维度修改为不一致的,如果对应一样的维度,增加一个维度,修改其名称就可以了。

瑞艾 数据达人Lv4

发表于2018-8-14 15:13

只看该作者

取消 关注该作者的回复

7#

wuq 发表于 2018-8-14 15:10
解决方法:
方案一:先试试将B列设置为指标,在B列的数据期条件里写B表.load_date=@bbq;
方案二:将浮动维 ...

韦韬然 数据老手Lv5

发表于2018-8-14 16:38

只看该作者

取消 关注该作者的回复

8#

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号