首页 > BO > BO中查询条件遇到跨年的情况要注意!
2014
01-16

BO中查询条件遇到跨年的情况要注意!

新的一年当然有新的气象,也有新的问题,我们直接进入正题,今天接到客户邮件提示daily report有问题,当查询条件为2014-01-01的时候没有数据,查询其他几天的数据正常。

问题描述很简单,BO报表一直都正常,只在年初第一天出现问题,当时就想到会不会是filter的问题,然后登陆产品库把query的sql down下来,修改相应的查询条件后,发现query没有问题,返回数据正常。随即查看了一张报表的指标取值,根据指标中的取值规则,一步一步反推条件,最终定位到是查询条件和指标中的条件未匹配上,返回不了任何结果。

由于信息安全,一下代码会被修改,和实际代码不一样,但效果一样的。

report中某个指标的取值规则是:=[自定义指标1] Where([query].[column1]=0)/[自定义指标2]

首先前面已经确定了query没有问题,把目标放在自定义指标上.

自定义指标1:=[query].[column2] Where ([query].[column3]=[自定义指标3])

现在继续查看自定义指标3.自定义指标3是取年份

自定义指标3:=Year(ToDate([自定义指标4];”MM/dd/yyyy”))

最终查找到自定义指标4.

自定义指标4:=If (ToDate(Trim(If (Pos(UserResponse(“Enter Query Date:”);” “)=0;UserResponse(“Enter Query Date:”);
Substr (UserResponse(“Enter Query Date:”);1;Pos(UserResponse(“Enter Query Date:”);” “))));”MM/dd/yyyy”)=ToDate(“01/01/1900″;”MM/dd/yyyy”);
FormatDate(LastExecutionDate();”M/d/yyyy”);Trim(If (Pos(UserResponse(“Enter Query Date:”);” “)=0;
UserResponse(“Enter Query Date:”);Substr (UserResponse(“Enter Query Date:”);1;Pos(UserResponse(“Enter Query Date:”);” “)))))

可以从自定义指标中得出结论,当查询条件为2014-1-1的时候,自定义指标将返回2014-01-01,然后自定义指标3会得到2014,然后放到自定义指标1中进行where条件过滤,这里就有问题了,因为此报表是查询前一天的报表,也就是说在query中的所有数据都是2013年的,但自定义指标1中传入过来的过滤条件却是2014,和query匹配不到任何数据,导致报表异常。

其实这个例子很简单,就是在自定义指标4中没有判断跨年第一天的情况,导致传入到其他指标的参数错误,修改方法也可以修改自定义指标4,也可以修改自定义指标3,加个判断条件即可。

所以以后大家在遇到如上需要匹配到年份的条件的情况,就一定要特别注意跨年的情况了。在这里祝大家新年快乐,工作顺利。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL