根据标准(前 30%、中等 40% 和后 30%)对投资组合进行排序
Sorting portfolios based on criteria (top30%,Middle 40%. and Bottom 30%)
目前,我有以下table
公司--------日期--------交易所--------规模
A----------------2000--------A------------50
A----------------2001--------A------------ 100
B----------------2000--------B------------450
B-------------2001---------B------------- 458
我想把每个公司分成三类
"Top" ==> 前 30%
"Middle" ==> 中间 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"))
由于某些原因,它没有正常工作。
提前致谢。
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()
.
现在添加您想要的 Top/Bottom/Middle 列:
= 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
我已经用 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")
目前,我有以下table
公司--------日期--------交易所--------规模
A----------------2000--------A------------50
A----------------2001--------A------------ 100
B----------------2000--------B------------450
B-------------2001---------B------------- 458
我想把每个公司分成三类
"Top" ==> 前 30%
"Middle" ==> 中间 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"))
由于某些原因,它没有正常工作。
提前致谢。
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()
.
现在添加您想要的 Top/Bottom/Middle 列:
= 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
我已经用 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")