OBIEE:将字符串转换为日期,然后将日期转换为字符串

时间:2015-02-25 15:56:40

标签: obiee

FILTER("source"."recordCount" USING "source"."snapshot_date" = 
    EVALUATE('TO_CHAR(%1, ''YYYYMMDD'')', TIMESTAMPADD(SQL_TSI_DAY, -7,  EVALUATE('TO_DATE(%1, %2)', "source"."snapshot_date" , 'YYYYMMDD'))))

所以我在这里有这段代码。我知道有些人会说“只使用AGO功能”但不知何故它会导致问题,因为它与其他表的连接所以我想在这里实现的就像重拍一样。这个过程就是这样的:

snapshot_date实际上是varchar格式而不是日期。所以它就像“20131016”,我正在尝试将其更改为日期,然后使用TIMESTAMPADD函数从中减去7天,然后最终将其返回到varchar以将其与FILTER一起使用。

这个片段在使用硬编码值(例如“20131016”)测试FILTER时会以某种方式工作,但是当使用上面的代码测试时,所有行都是空白的。在纸面上,我假设的过程会发生这种情况。 “20131016”变为格式为20131016(yyyymmdd)的日期,然后减少7天:20131009,然后再次变为char“20131009”以用于过滤器。

但不知怎的,这种情况不会发生。我认为数据格式不适用于string-> date或date->字符串转换。这导致价值根本没有得到匹配。

任何人都知道我的代码有什么问题?

顺便说一句,我已经尝试使用CAST而不是EVALUATE或TO_TIMEDATE来获得相同的结果。哦,这是BMM专栏的公式。

由于

2 个答案:

答案 0 :(得分:0)

通过查看BI Server生成的SQL,您可能会得到一些线索。我看不到列表达式的任何问题,所以我不会将调试限制为仅限于此。

返回空值的查询通常是由设置的错误级别引起的(特别是在逻辑表源上,但也可能在度量列上)。这通常会在物理SQL中产生某种形式的SELECT NULL FROM ...

答案 1 :(得分:0)

试试这个:

FILTER("source"."recordCount" USING "source"."snapshot_date" = 
    EVALUATE('TO_CHAR(%1, %2)', TIMESTAMPADD(SQL_TSI_DAY, -7,  EVALUATE('TO_DATE(%1, %2)', TO_CHAR("source"."snapshot_date" , 'YYYYMMDD') , 'YYYYMMDD')) , 'YYYYMMDD'))