根据标准对投资组合进行排序(前30%,中40%和后30%)

时间:2016-07-10 17:16:44

标签: powerpivot portfolio percentile

目前,我有以下表格

公司--------- --------日期交换-------尺寸

一个--------------- 2000 ---------甲------------- 50

A --------------- 2001 --------- A ------------ 100

乙--------------- 2000 ---------乙------------ 450

B --------------- 2001 --------- B ------------- 458

我想将每家公司分为三类

“顶部”==>前30%

“中间”==>中间40%

“Bottom”==>底部30%

计算截止值应使用'year'和'Exchange'= A

进行过滤

我尝试过以下公式

  =if([B/M]>PERCENTILEX.INC(FILTER(June,June[exchg]="A"&&EARLIER([datadate])=[datadate]),June[B/M],0.3),"L",IF([B/M]>PERCENTILEX.INC(FILTER(June,June[exchg]="A"&&EARLIER([datadate])=[datadate]),June[B/M],0.7),"M","T")) 

由于某些原因,它不能正常工作。

提前致谢。

2 个答案:

答案 0 :(得分:0)

DAX(a.k.a.Power Pivot)公式PERCENTILE()仅适用于Excel 2016的预览版(请参阅此处:https://msdn.microsoft.com/en-us/library/dn802551.aspx)。

由于我没有安装此版本,因此无法使用建议的公式给出答案。但是,您可以使用RANKX()构建自己的百分位逻辑。

首先,添加一个名为[RankInExchangeA]的新列:

=RANKX(
    FILTER(
        Table1,
        EARLIER([Exchange])=[Exchange] && EARLIER([year])=[year]
    ),
    [size]
 )

EARLIER()功能基本上意味着ThisRowsValue()

现在添加您想要的顶部/底部/中间列:

= Switch(TRUE(),
         [RankInExchange]>=CALCULATE(max([RankInExchange]),filter(Table1,EARLIER([year])=[year] && EARLIER([Exchange])=[Exchange]))*(7/10),"Bottom",
         [RankInExchange]<CALCULATE(max([RankInExchange]),filter(Table1,EARLIER([year])=[year] && EARLIER([Exchange])=[Exchange]))*(3/10),"Top",
         "Middle"
     )

公式的*(3/10)*(7/10)部分决定了阈值。请注意,在示例中,群集按如下方式完成:

Bottom <= 30% < Middle <= 70% < Top

答案 1 :(得分:0)

我已经使用percentilex.inc函数进行了管理。这是我使用的完整公式。

=SWITCH(TRUE(),Table[SIZE]<=PERCENTILEX.INC(FILTER(Table,EARLIER([Date])=[Date]),Table[SIZE],0.3),"Bottom",Table[SIZE]>=PERCENTILEX.INC(FILTER(Table,EARLIER([Date])=[Date]),Table[SIZE],0.7),"Top","Middle")