过滤过去 n 周

Filtering on the last n weeks

我有一份关于 Cognos 11 的报告,我想在其中显示过去 n(比方说 15)周的数据。 为了测试目的,我使用 2 个过滤器快速而肮脏地完成了它:

[Année] = extract(year;getdate())
[N° Semaine] >= _week_of_year (getdate()) - 15

但是,2020 年即将到来,因此如果我保留这些过滤器,那么在今年的前 15 周内我将获得非常有限的数据。

什么说法比较好:"If we didn't reach week 15 yet, include the last week from 2019, and the week before that, etc." ?

我可以在框架中使用以下字段:

Date (ie : "10/12/2019")
Year (ie : 2019)
Month (ie : 12)
Week (ie : 48)
Year-Month (ie : "2019-12")
Weekday (ie : "Monday")

无论我尝试什么,我似乎都 运行 遇到了问题。 如果我使用

Date >= _add_months (getdate();-3)

例如,我将获得的第一周的数据将取决于我 运行 报告的日期。

由于 Year-Month 数据项是一个字符串,我不能用它做太多事情。

如有任何帮助,我们将不胜感激。

我找到了正确的方法:

[Date] > _add_months (_add_days (getdate();-_day_of_week (getdate();1));-3)

这是一种解决方法,因为我没有选择要返回的周数,而是选择了月数。

这个答案处理星期,这不同于将过滤器设置为 >= 到日期

即使你在不同的日子(周一、周二等),它也会按周数倒退(因此包括整周,你不必担心数据被切断)

试试这样的过滤器:

([Year] = [Curr Year] and
[Week of the year] between [Reduce Weeks] and [Current Week])
OR
([Year] = [Prior year] and [Reduce Weeks] <= 0 and 
[Week of the year] >= 52 - [Prior year weeks])

表达式:

如果您没有年份的数据项,这个表达式是可选的

  • 年份 = 提取物(年份,[日期])

其余数据项有助于使过滤器更容易一些

  • 目标日期 = getdate()
  • 一年中的第几周 = _week_of_year([日期])
  • 当前年份 = 提取物(年份,[目标日期])
  • 前一年 = 提取物(年份,[目标日期])-1
  • 本周 = _week_of_year([目标日期])
  • 减少周数 = [当前周] - 14
  • 前一年周数 = if([减少周数] < 0)Then(abs([减少周数])+1)else(0)

要获取最后 n 周,请更改表达式以接受参数

  • 减少周数 = [当前周] - (?NumberOfWeeks?-1)

说明

当周数减少为负时,我们就需要包括前一年

过滤器中的 OR 条件处理前一年的周数 一年52周,取负数的绝对值加1抵消上一年的计算

由于您使用的是 SQL 服务器,您可以为此编写代码,Cognos 会接受它。通过 Cognos SQL 解析器存在一些细微的语法差异。

[Date] > dateadd({week}, -15, getdate())

今天,这个 returns 2019-09-07 或之后的所有日期(因为 2019-09-06 是 15 周前)。