Spotfire与第一个'n'期相交

时间:2016-10-13 03:13:38

标签: function spotfire

有没有办法使用Over和Intersect函数来获得每个Employee的前3个时段(不总是连续几个月,有时一个月被跳过)的平均销售额?

例如:

  • EmpID 1是71.67((80 + 60 + 75)/ 3)尽管跳过了“3/1/2007”
  • EmpID 3为250((350 + 250 + 150)/ 3)。
  • 我不确定EmpID 2是如何工作的,因为只有两个数据点。

我使用DenseRank over Date,“asc”,EmpID然后使用另一个布尔计算列,其中DenseRank列名称为< = 3,然后使用Over函数覆盖Boolean = TRUE专栏,但我想找出正确的方法来做到这一点。

有最后'n'期间功能,但我没有看到任何类似于'n'期间功能的东西。

EmpID    Date   Sales
1   1/1/2007    80
1   2/1/2007    60
1   4/1/2007    75
1   5/1/2007    30
1   9/1/2007    100
2   2/1/2007    200
2   3/1/2007    100
3   12/1/2006   350
3   1/1/2007    250
3   3/1/2007    150
3   4/1/2007    275
3   8/1/2007    375
3   9/1/2007    475
3   10/1/2007   300
3   12/1/2007   200

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为解决方案取决于您希望此数据表示的位置,但这是一个示例

If((Rank([Date],"asc",[EmpID])<=3) and (Max(Rank([Date],"asc",[EmpID])) OVER ([EmpID])>=3),Avg([Sales]) over ([EmpID]))

您可以将其作为计算列插入,它会为您提供所需内容(假设您的数据按导入时的日期排序)。

您可能希望查看行编号,在这种情况下,也要将其作为计算列插入并命名为RN

Rank([Date],"asc",[EmpID])

<强>解释

Rank([Date],"asc",[EmpID])

此部分功能基本上是将行号(在下面的结果中标记为RN)应用于每个EmpID分组。

Rank([Date],"asc",[EmpID])<=3

无论是否跳过月份,这都是我们排在前3行的方式。如果您的数据没有排序,我们必须创建一个额外的计算列,但适用相同的逻辑。

(Max(Rank([Date],"asc",[EmpID])) OVER ([EmpID])>=3)

这是我们基本上忽略EmpID = 2或任何没有至少3行的EmpID的地方。删除此选项将分别根据前一个,两个月或三个月的每个EmpID为您提供平均值(动态)。

Avg([Sales]) over ([EmpID])

现在我们的数据仅限于我们关注的行,只需取每个EmpID的平均值。

enter image description here

答案 1 :(得分:1)

@Chris-这是我提出的解决方案

第1步:已插入计算列&#39;排名&#39;用下面的表达式

DenseRank([Date],"asc",[EmpID])

第2步:使用下面的表达式从数据表和有限数据创建交叉表可视化

enter image description here

enter image description here