Sorting portfolios based on criteria (top30%,Middle 40%. and Bottom 30%)

点点圈 提交于 2019-12-13 06:52:01

问题


Currently, I have the following table

Company---------Date--------Exchange-------Size

A---------------2000---------A-------------50

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

B---------------2000---------B------------450

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

I want to allocate each company into three categories

"Top" ==> Top 30%

"Middle" ==> Middle 40%

"Bottom" ==> Bottom 30%

Calculating cutoff values should be filtered with 'year' and 'Exchange'=A

I have tried the following formula

  =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")) 

For some reasons, It is not working as it should be.

Thanks in advance.


回答1:


The DAX (a.k.a. Power Pivot) formula PERCENTILE() is only available in the preview edition of Excel 2016 (see here: https://msdn.microsoft.com/en-us/library/dn802551.aspx).

Since I don't have this version installed I can't give an answer using the suggested formula. However, you can build your own percentile logic using RANKX().

First, add a new column called [RankInExchangeA]:

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

The EARLIER() function basically means ThisRowsValue().

Now add your desired Top/Bottom/Middle column:

= 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"
     )

The *(3/10) and *(7/10) part of the formula determines the thresholds. Note that in the example the clustering is done as follows:

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



回答2:


I have manged to do it with percentilex.inc function. Here is the full formula that I have used.

=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")


来源:https://stackoverflow.com/questions/38294515/sorting-portfolios-based-on-criteria-top30-middle-40-and-bottom-30

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!