我想要创建一个计算,将当前月份和上个月的维度添加到Cognos数据模块中。月格式是2022/11,这是我试过的。我没有收到错误消息,但是计算没有返回结果。
Case
when (Month_Adj = #timestampMask(_add_months($current_timestamp,0),'yyyy')+'/'+timestampMask(_add_months($current_timestamp,0),'mm')#) then 'Last Month'
when (Month_Adj = #timestampMask(_add_months($current_timestamp,-1),'yyyy')+'/'+timestampMask(_add_months($current_timestamp,-1),'mm')#) then 'Previous Month'
else null
end请找一张截图作为参考。

发布于 2022-11-28 16:10:11
您正在将宏的十进制结果与数据中的字符值进行比较。您没有语法错误,因为SQL隐式地为比较转换十进制值。但这些数值不太可能匹配。
使用今天的日期,你的宏代码..。
#timestampMask(_add_months($current_timestamp,0),'yyyy')+'/'+timestampMask(_add_months($current_timestamp,0),'mm')#...should生产.
CAST(2022 AS DOUBLE PRECISION) / 11因此产生的SQL实际上是..。
Case
when (Month_Adj = 183.818181812) then 'Last Month'
when (Month_Adj = 202.2) then 'Previous Month'
else null
end在连接表达式的三个部分之前,使用sq()函数在宏函数返回的值周围放置引号。
#sq(timestampMask(_add_months($current_timestamp, 0),'yyyy'))# + '/' + #sq(timestampMask(_add_months($current_timestamp, 0),'mm'))#您可以看到Cognos生成的SQL .
在报表级别的
发布于 2022-11-28 19:57:01
Cognos相对时间过滤器允许您创建一组预定义的相对时间度量,而不需要太多的干扰。
如果希望从同一事实或不同事实表引用两个或多个相对时间度量的计算,则需要创建独立计算,并确保“聚合后计算”标志已打开。
我认为最棘手的部分是在事实表中设置查找引用。
这里有两个表达式,可以用作查找引用的模式。
第一个适用于将202211格式的键值转换为年月日期数据类型。
cast( cast( MONTH_KEY as varchar(8)) ,1,4 )分部'-‘+子字符串( MONTH_KEY作为varchar(8)) ,5,2 )x’-01‘,日期)
第二种方法适用于将20221128格式的键值转换为年月日数据类型。
cast( cast( SHIP_DAY_KEY as varchar(10)) ,1,4 )7,2 '-‘+子字符串( SHIP_DAY_KEY作为varchar(10) ,5,2 )x-’分部( SHIP_DAY_KEY作为varchar(10) ,7,2 ),日期)
如果键值比较抽象,则需要找到一种生成值的方法,该方法将映射到相对时间过滤器的值。
这是一个相对时间概述的链接。https://www.ibm.com/docs/en/cognos-analytics/11.2.0?topic=analysis-sample-calendars
下面是如何定制它们:
https://www.ibm.com/docs/en/cognos-analytics/11.2.0?topic=analysis-creating-relative-date-filters
https://www.ibm.com/docs/en/cognos-analytics/11.2.0?topic=calendars-creating-custom-retail-calendar
https://pmsquare.com/analytics-blog/2020/1/10/creating-custom-calendars-in-cognos-analytics-111
https://senturus.com/blog/how-to-customize-relative-time-in-cognos-data-modules/
在11.2.3中,他们实现了where子句对相对时间的支持,这使得使用它们的查询更加高效,因为您没有在查询结果中执行大量本地处理,以查找符合筛选器的值,因为查询现在将被筛选为只有您想要的结果。
https://stackoverflow.com/questions/74570246
复制相似问题