根据条件查找日期差异

Find date difference based on condition

我有一个 table 可以按月或按年提供数据。 table 数据如下所示:

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 else No.

因此 Class 1 - Shelly 的行和 Class 2 的所有行(不包括 Soni)应设置为是。

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

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

  1. 插入计算列DatePart("year",[Date]) as [Year]
  2. 插入计算列If(Count([Item]) OVER (Intersect([Name],[Item],[Year]))>1,"Yes","No") as [Flag]

可能 认为有用的另一个表达式将对每个 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]