2016-12-01 72 views
0

我有一个费用文件,其中包含每个与会者的单独记录,但会重复总费用金额。Spotfire多个级别的总和

Employee Report ID Transaction Date Vendor   City/Location Expense Type Approved Amount Attendee Name 
John Smith A   4/20/2016   UNITED AIRLINES NYC   Airfare   317.1   Jane smith 
John Smith A   4/20/2016   UNITED AIRLINES NYC   Airfare   317.1   jack smith 
John Smith A   4/20/2016   UNITED AIRLINES NYC   Airfare   317.1   tom white 
John Smith A   4/20/2016   Bar and Grill NYC   Dinner   94.74   kelly thompson 
John Smith A   4/20/2016   Bar and Grill NYC   Dinner   94.74   joan ellen 
John Smith A   4/20/2016   Bar and Grill NYC   Dinner   94.74   albert coals 

我需要在不重复费用金额的情况下按城市总和费用总额。我曾尝试以下自定义表达式,而在城市做一个交叉表:

Sum(max([Approved Amount]) over (Intersect([Transaction Date],[Vendor]))) 

但是,这已经导致

City Amount 
NYC 1235.52 

我正在寻找像

City Amount 
NYC 411.84 

任何建议结果将不胜感激。

+0

您是否拥有订单项ID或某种方式来唯一标识费用记录? – niko

+0

该记录没有唯一标识符。 – cookiemnstr247

+0

会有没有完全重复的行?即同一数量的同一参加者以及城市和供应商和员工等...? – scsimon

回答

1

@ cookiemnstr247 - 请测试以下解决方案,让我知道,如果它的工作原理。

步骤1:插入计算的列 '排名'

Rank([Approved Amount],"desc",[Employee],[Transaction Date],[City/Location],[Vendor],"ties.method=first") 

步骤2:插入另一个计算列 'sumvalue'

If([Rank]=1,[Approved Amount],0) 

步骤3:创建一个交叉表如下面的屏幕截图所示

enter image description here

我测试过这个解决方案的不同场景,它似乎是稳定的。

注意:在此情况下,员工,交易日期,城市/位置和供应商仅用于分组。如果您想要添加更多列进行分组,请将其添加到排名列

+0

如果存在重复行? – scsimon

+0

我们将不得不审查数据并预先删除任何重复项,但否则这似乎会提供所需的结果。谢谢。 – cookiemnstr247

+0

不幸的是,你会不会知道,直到它太晚@ cookiemnstr247 – scsimon

0

我认为这会工作,虽然我承认我有一点麻烦的测试:

Sum(Max([Approved Amount]) OVER (Intersect(All([Axis.Rows]),[Vendor])) * (If(RankReal([Approved Amount],[Vendor],"ties.method=first")>1,0,1)))