根据条件查找日期差异
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
的组合,日期差异可以是 monthly
或 yearly
。我想包括一个名为 Flag
的计算列。设置标志的条件是,如果用户输入了 monthly
数据则设置值为 Yes
else No.
因此 Class 1 - Shelly 的行和 Class 2 的所有行(不包括 Soni)应设置为是。
任何人都可以指导我吗?如果我尝试 Over 和 Intersect,对于某些列,结果是空白行。
假设每个项目/名称配对至少有 2 个月的数据,您可以采用两种方法。请注意,除非您有 2 个月的数据,否则您无法判断对于给定年份,您是按月还是按年接收数据。
- 插入计算列
DatePart("year",[Date]) as [Year]
- 插入计算列
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]
我有一个 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
的组合,日期差异可以是 monthly
或 yearly
。我想包括一个名为 Flag
的计算列。设置标志的条件是,如果用户输入了 monthly
数据则设置值为 Yes
else No.
因此 Class 1 - Shelly 的行和 Class 2 的所有行(不包括 Soni)应设置为是。
任何人都可以指导我吗?如果我尝试 Over 和 Intersect,对于某些列,结果是空白行。
假设每个项目/名称配对至少有 2 个月的数据,您可以采用两种方法。请注意,除非您有 2 个月的数据,否则您无法判断对于给定年份,您是按月还是按年接收数据。
- 插入计算列
DatePart("year",[Date]) as [Year]
- 插入计算列
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]