过滤过去 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 周前)。
我有一份关于 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 周前)。