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专栏的公式。
由于
答案 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'))