Cognos - 仅从记录中每月选择一条记录

时间:2016-06-18 23:52:49

标签: cognos

我无法构建查询,请查看我的示例架构

Table Name: KRIs
KRI_ID  KRI_Name
------  --------
K1      KNM
K2      KNM2

Table Name: KRIValues
KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID 
---------  -----------  -------------- -------------------  -------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2

现在,如果我们加入PK与FK,我们将获得

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

现在我知道我可以使用rank()来获取最新的n条记录,让我们说每个KRI_ID最后3条记录,如下所示

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

但我不想这样做我确实需要最后n条记录,但我只需要每月选择一条记录。如下所示

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

在上面我只选择2016-02-01的最新记录。如何在IBM Cognos Report Studio中执行此操作。

1 个答案:

答案 0 :(得分:1)

我相信你可以通过过滤器和使用maximum()聚合函数来实现这一点。

我将用简化的例子演示:

KRI_Value_Date | KRIVal_Create_Date | KRI_ID
2016-01-01 | 2016-01-01 06:01:02 | K1 
2016-02-01 | 2016-02-01 05:12:13 | K1
2016-02-01 | 2016-02-01 05:20:20 | K1
2016-01-01 | 2016-01-01 10:09:12 | K2

您可以按如下方式添加过滤器:

[KRIVal_Create_Date] = maximum([KRIVal_Create_Date] for [KRI_ID],extract(year,[KRIVal_Create_Date]),extract(month,[KRIVal_Create_Date]))

我们找到每个ID,年和月组合的最大创建日期,并且只包含日期与该日期匹配的行。