根据条件查找日期差异

时间:2017-03-21 16:05:21

标签: spotfire tibco

我有一张表,可以按月或按年提供数据。表数据如下所示:

Item        Date        Name
Class 1     12/31/2010  David
Class 1     12/31/2011  David
Class 1     12/31/2012  David
Class 1     12/31/2010  Moses
Class 1     12/31/2011  Moses
Class 1     12/31/2012  Moses
Class 1     01/31/2012  Shelly
Class 1     02/28/2012  Shelly
Class 1     03/31/2012  Shelly
Class 1     04/30/2012  Shelly
Class 1     05/31/2012  Shelly
Class 1     06/30/2012  Shelly
Class 1     07/31/2012  Shelly
Class 1     08/31/2012  Shelly
Class 1     09/30/2012  Shelly
Class 1     10/31/2012  Shelly
Class 1     11/30/2012  Shelly
Class 1     12/31/2012  Shelly

Class 2     01/31/2012  Shelly
Class 2     02/28/2012  Shelly
Class 2     03/31/2012  Shelly
Class 2     04/30/2012  Shelly
Class 2     05/31/2012  Shelly
Class 2     06/30/2012  Shelly
Class 2     07/31/2012  Shelly
Class 2     08/31/2012  Shelly
Class 2     09/30/2012  Shelly
Class 2     10/31/2012  Shelly
Class 2     11/30/2012  Shelly
Class 2     12/31/2012  Shelly
Class 2     01/31/2012  David
Class 2     02/28/2012  David
Class 2     03/31/2012  David
Class 2     04/30/2012  David
Class 2     05/31/2012  David
Class 2     12/31/2011  Soni
Class 2     12/31/2012  Soni

对于Name and Item的组合,日期差异可以是monthlyyearly。我想要包含一个名为Flag的计算列。设置标记的条件是,如果用户输入了monthly数据,则将值设置为Yes否则为。

所以具有Class 1 - Shelly的行和除Soni之外的所有Class 2行应该设置为Yes。

有人可以指导我吗?如果我尝试Over和Intersect,对于某些列,结果是空行。

1 个答案:

答案 0 :(得分:1)

假设每个项目/名称配对至少有2个月的数据,您可以采用这两种方式。请注意,除非您有2个月的数据,否则您无法判断在给定年份,您是每月还是每年接收数据。

  1. 插入计算列DatePart("year",[Date]) as [Year]
  2. 插入计算列If(Count([Item]) OVER (Intersect([Name],[Item],[Year]))>1,"Yes","No") as [Flag]
  3. 可能发现有用的另一个表达式会将排名/行号应用于每个Year | Month | Item | Name配对。这是一个表达式,您可以使用它来查看您有多少个月的数据(使用MAX())或进行其他聚合/逻辑检查。

    RankReal(Date(DatePart("year",[Date]),DatePart("month",[Date]),1),"asc",[Name],[Item],DatePart("year",[Date]),"ties.method=minimum") as [RowRank]