提问人:Doritito 提问时间:11/25/2022 更新时间:11/29/2022 访问量:183
如何使用 Cognos SQL 实现当月和上月作为计算
How to implement Current Month and Previous Month as a Calculation using Cognos SQL
问:
我想创建一个计算,将当月和上一个月的维度添加到 Cognos Data Module。月份格式为 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
答:
您正在将宏中的十进制结果与数据中的字符值进行比较。您没有语法错误,因为 SQL 隐式强制转换了比较的十进制值。但这些值不太可能匹配。
使用今天的日期,您的宏代码...
#timestampMask(_add_months($current_timestamp,0),'yyyy')+'/'+timestampMask(_add_months($current_timestamp,0),'mm')#
...应该产生...
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...
- 在报告级别,更多(省略号)|显示生成的 SQL/MDX
- 在查询编辑器中,“属性”|”数据 |生成的 SQL
Cognos 相对时间过滤器允许您创建一组预定义的相对时间度量,而无需过多地混淆。
如果要从同一事实或不同事实数据表中引用两个或多个相对时间度量值的计算,则需要创建独立计算,并确保聚合后计算标志处于打开状态。
我认为最棘手的部分是在事实表中设置查找引用。
这里有两个表达式,可以用作查找引用的模式。
第一种适用于将202211格式的键值转换为年-月日期数据类型。
演员表 ( 子字符串( cast( MONTH_KEY as varchar(8)) ,1,4 ) ||'-' + 子字符串( cast( MONTH_KEY as varchar(8)) ,5,2 )||'-01' 、日期)
第二种适用于将20221128格式的键值转换为年-月-日数据类型。
演员表 ( 子字符串( cast( SHIP_DAY_KEY as varchar(10)) ,1,4 ) ||'-' + 子字符串( cast( SHIP_DAY_KEY as varchar(10)) ,5,2 )||'-' || 子字符串( cast( 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 子句支持,这使得使用它们的查询更加高效,因为您不需要在查询结果中进行大量本地处理,以寻找适合过滤器的值,因为查询现在将被过滤以仅具有您想要的结果。
下一个:SQL 捆绑包产品操作
评论