我有一张表,可以按月或按年提供数据。表数据如下所示:
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
否则为。
所以具有Class 1 - Shelly的行和除Soni之外的所有Class 2行应该设置为Yes。
有人可以指导我吗?如果我尝试Over和Intersect,对于某些列,结果是空行。
答案 0 :(得分:1)
假设每个项目/名称配对至少有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]