【问题标题】:removing duplicates in cognos 10 based on non duped column/field基于非重复列/字段删除 cognos 10 中的重复项
【发布时间】:2017-05-17 04:23:02
【问题描述】:

下面的报告生成 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 显示一行,但如果有的话,它必须显示主要的。如果不是,那么它必须显示非主要的。如果有多个主节点只显示一个,则无关紧要,如果有多个非主节点(当没有任何主节点时)只显示一个,则无关紧要。

如果条件基于日期,我可以使用 min 或 max 但这个不同。

【问题讨论】:

    标签: cognos cognos-10 cognos-8


    【解决方案1】:

    您可以创建按primary DESCY 会更高)和日期排序的额外列排名。如果您有两个 YN,排名 1 将是一个更新日期。然后你可以在查询中添加过滤器,只过滤带有rank=1的列。

    额外列的表达式定义:

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

    【讨论】:

      【解决方案2】:

      添加一个名为 Row Count 的数据项,表达式如下:

      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 成为最大值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-03
        • 2016-02-21
        • 2017-02-20
        • 2018-12-27
        • 2015-08-04
        • 2018-04-07
        • 2020-07-09
        相关资源
        最近更新 更多