R/SQL—投资组合性能

R/SQL—投资组合性能,sql,sql-server,r,excel,tableau-api,Sql,Sql Server,R,Excel,Tableau Api,假设我有一个表:3个投资组合账户、日期和百分比变化,即5实际上代表5% Date Account %Change 8/1/2015 A 5 8/1/2015 B 1 8/1/2015 C 2 8/2/2015 A -2 8/2/2015 B 6 8/2/2015 C 1 8/3/2015 A 3 8/3/2015

假设我有一个表:3个投资组合账户、日期和百分比变化,即5实际上代表5%

Date      Account   %Change
8/1/2015    A          5
8/1/2015    B          1
8/1/2015    C          2
8/2/2015    A         -2
8/2/2015    B          6
8/2/2015    C          1
8/3/2015    A          3
8/3/2015    B         -4.5
8/3/2015    C         -3
现在我想添加一个新的列“Score”,并自动计算基于 就百分比变化而言,假设2015年8月1日是最早的数据,那么8月1日账户A的得分将为100*(1+5%)=105,8月2日将为 105*(1-2%)=102.9,基本上就像今天的分数=昨天的分数*(1+%变化)。让100作为最早日期之前的基准分数

Date      Account     %Change      Score
8/1/2015    A           5           105
8/1/2015    B           1           101
8/1/2015    C           2           102
8/2/2015    A           -2          102.9
8/2/2015    B           6           107.06
8/2/2015    C           1           103.02
8/3/2015    A           3           105.99
8/3/2015    B          -4.5         102.24
8/3/2015    C          -3           99.93
我这里有两个问题:

  • 如何将%change列转换为实际百分比类型,如5->5%或0.05
  • 日期+帐户一起就像主键一样,所以分数是基于不同帐户的时间。我们不能简单地使用最后一行 计算当前行,因为最后一行的科目与当前行不同。根据帐户对数据进行排序可能更容易,但是 在对数据进行排序后,我们仍然需要检查哪一行是新帐户,例如,第1-3行->A,第4-6行->B
  • 排序后:

    Date        Account     %Change   Score
    8/1/2015        A          5       105
    8/2/2015        A         -2       102.9
    8/3/2015        A          3       105.99
    8/1/2015        B          1       101
    8/2/2015        B          6       107.06
    8/3/2015        B         -4.5     102.24
    8/1/2015        C          2       102
    8/2/2015        C          1       103.02
    8/3/2015        C         -3       99.93
    
    原始数据源位于SQLServer中。这是数据预处理,在我得到预期的数据格式之后,我将使用Tableau进行数据处理。基本上,整个目的是可视化数据,但原始数据没有“分数”,只有%的变化。Tableau似乎不适合这种数据操作,所以我想知道我是否可以在SQLServer中进行操作,或者使用R进行计算


    如果您有任何想法或建议,请发布,谢谢

    要将C列中的值转换为百分比,只需除以100即可。你可以这样做

    • 在某个空白单元格中输入
      100
    • 编辑/复制
    • 选择C2:Cn
    • 编辑/粘贴特殊/分割
    • ESC以删除选择
    • 您可能希望使用1位小数设置百分比格式,正如我在下面的屏幕截图中所做的那样
    假设第三个
    A
    实例的108.15是一个错误,并且您的表以A1开头,第1行有列标题,那么将给出您显示的结果的公式(无论数据是否排序,都是:

    D2: =IF(COUNTIF($B$2:B2,B2)=1,100*(1+C2),LOOKUP(2,1/($B$1:B1=B2),$D$1:D1)*(1+C2))
    

    公式说明


    第三个实例
    A
    如何得到108.15?我觉得102.9*(1+3%)应该是105.987谢谢你的回复,这是一个错误,应该是105.99,正如你所说。似乎将数据输出到excel是解决我问题的最简单方法,在SQLServer中实现相同的目标会非常复杂吗?@JerryLi我无法回答。也许有SQL经验的人会插话。