Spotfire自定义表达式汇总了日期和唯一标识符

时间:2016-08-30 13:23:55

标签: expression tibco spotfire

我正在尝试在Spotfire中制作条形图,其中y轴通过自定义表达式显示,x轴为一年。

我每年使用一个乘数,然后总结。基本上,我有一个大型数据集,而且我使用的是每年发布的模型,只有这些数据的一定比例实际上很重要。所以我试图制作一个条形图,只有那么重要的"重要的"数据。当我的数据只包含唯一记录时,此表达式有效:

Sum(Case  
when (Year([Date*])=2011) and ([Source]="A") then  0.43 
when (Year([Date*])=2012) and ([Source]="A") then  0.44 
when (Year([Date*])=2013) and ([Source]="A") then  0.45 
when (Year([Date*])=2014) and ([Source]="A") then  0.47 
when (Year([Date*])=2015) and ([Source]="A") then  0.48
else 0 
end)

但是,我的数据确实包含一些重复记录。例如,我的数据看起来像这样:

ID    Source    Date*       TA
1     A         1/2/2013   C
1     A         1/2/2013   D
2     A         3/5/2015   E
3     A         11/15/2012 B
3     A         11/15/2012 C
4     B         2/15/2014  B

如果我使用上面的工作代码,我最终会重复计算记录ID 1和3.注意我也有Source <> A的数据,但我不想在图表中包含这些数据。< / p>

我尝试过这样的事情,但这完全错了:

Sum(Case  
when (Year([Date*])=2011) and ([Source]="A") then UniqueCount([ID]) * 0.43 
when (Year([Date*])=2012) and ([Source]="A") then UniqueCount([ID]) * 0.44 
when (Year([Date*])=2013) and ([Source]="A") then UniqueCount([ID]) * 0.45 
when (Year([Date*])=2014) and ([Source]="A") then UniqueCount([ID]) * 0.47 
when (Year([Date*])=2015) and ([Source]="A") then UniqueCount([ID]) * 0.48
else 0 
end)

如何按年份和唯一标识符汇总不同的百分比?在then之后,我是否需要考虑某种过度陈述?我被困住了,不胜感激。

2 个答案:

答案 0 :(得分:0)

我相信这应该有效:

UniqueCount([ID]) * 
Avg(Case  
when (Year([Date*])=2011) and ([Source]="A") then 0.43 
when (Year([Date*])=2012) and ([Source]="A") then 0.44 
when (Year([Date*])=2013) and ([Source]="A") then 0.45 
when (Year([Date*])=2014) and ([Source]="A") then 0.47 
when (Year([Date*])=2015) and ([Source]="A") then 0.48
else 0
end)

基本上,您使用唯一计数对基于x轴拆分为年的唯一ID求和。然后,您将此计数乘以您在case语句中指定的数字。需要平均值,因为需要聚合值才能使可视化工作正常。

答案 1 :(得分:0)

尝试以下方法:

(1)添加一个计算列(数据清理值),用于分配案例陈述中的值:

Case  
when (Year([Date*])=2011) and ([Source]="A") then 0.43 
when (Year([Date*])=2012) and ([Source]="A") then 0.44 
when (Year([Date*])=2013) and ([Source]="A") then 0.45 
when (Year([Date*])=2014) and ([Source]="A") then 0.47 
when (Year([Date*])=2015) and ([Source]="A") then 0.48
else 0

(2)为RowID添加计算列(RowID):

RowID()

(3)添加一个计算列(清除数据),该列标记每个重复值记录集的第一行,并返回该记录的case语句中的值:

If([RowId]=Min([RowId]) over ([ID]),[Data Cleaning  Value],null)

(4)创建条形图,在x轴上显示日期,在y轴上创建总和([清理数据])。

当我使用您提供的数据执行此操作时,结果图与我在其他答案中由自定义表达式驱动的图相同。没有额外的数据虽然我无法测试它是否会在更大的数据集上。