基于非欺骗列/字段去除cognos 10中的重复项

时间:2017-03-15 19:15:44

标签: cognos cognos-10 cognos-8

以下报告生成id,name,primary(用户是否为主要用户(Y或N)以及用户加入的日期。我不希望报告中有任何重复的ID,我想要基于条件来删除主列上的欺骗。如果名称是主要的,我想保留行。如果它不是主要的,我只想在有主要时删除它。

ID   Name  Primary   Date

1,     Jerry,          Y,       2/10/12

1,      Jack,          N,       2/10/12

1,      Jerry,         N,        2/10/12

2,       Nancy,        Y,        1/18/17

2,      Chris,         N,        3/4/15

3,       Vicky,        N,         10/2/16

3,       Mary,         Y,        2/2/10

4,       Jeff,         N,         1/1/11

4,       John,         N,         2/2/12

期望的输出

ID   Name  Primary   Date

1,     Jerry,          Y,       2/10/12

2,      Nancy,         Y,        1/18/17

3,       Mary,         Y,        2/2/10

4,      Jeff,          N,        2/2/12

基本上我想为每个id显示一行,但如果有的话,它必须显示主行。如果没有,那么它必须显示非主要。如果有多个主要的只显示一个,那么无关紧要,如果有多个非主要(当没有任何主要时)只显示一个而且无关紧要。

如果条件是基于我可以使用最小值或最大值的日期,但这个是不同的。

2 个答案:

答案 0 :(得分:0)

您可以创建按primary DESC排序的额外列排名(Y将更高)和日期。如果您有两个YN,则排名1将是具有较新日期的排名。然后,您可以添加过滤器进行查询,以便仅使用rank=1过滤列。

额外列的表达式定义:

rank( [Query2].[PRIMARY] DESC,[Query2].[DATE_ID] for [Query2].[ID]) 

答案 1 :(得分:0)

使用以下表达式添加名为行计数的数据项:

running-count(1 for [ID],[Primary])

将数据项的聚合属性设置为计算。我们将此数据项用作决胜局。

现在添加此过滤器:

[Primary] = maximum([Primary] for [ID])
and 
[Row Count] = minimum([Row Count] for [ID],[Primary])

当有Y行时,这将只显示一个Y行,当没有Y行时,它将回退到单个N行。当第一个条件导致多行时,第二个条件选择第一个条件。由于您表示如果有多个行,您并不关心选择哪一行,我们可以通过更改第二部分中的 minimum()函数轻松选择最后一行。过滤器 maximum()

注意:应用于单个字符时,聚合函数 maximum()使用字符的ASCII数字表示形式进行比较。 N的ASCII值为78,而Y的值为89.因此,当Y和N值都存在时,Y始终是最大值。当然,当只存在N个值时,N变为最大值。