我有一个要求,其中,我需要根据图表中的销售额来获得前五大品牌。
方案如下: 样本数据如下
Brand Sales
-----------
H 3500
B 2500
I 2200
A 1500
J 1400
K 900
E 800
F 700
L 650
D 600
C 500
N 200
M 150
G 100
Others null
现在,要求始终根据销售情况展示前五大品牌。即,排名前四的品牌和第五个品牌显示为其他品牌。
当用户从切片机中选择任何品牌(单一选择)时,该特定品牌应该排名 - 第一和往常是下一个前3个品牌,最后一个是'其他'将剩下的分组。
我成功获得了前四大品牌和其他品牌。但是,坚持根据切片器选择获得动态排名。
请参阅我创建的以下措施:
销售总额
SumSales = SUM(Sheet1[Sales])
等级
Rank = RANKX(ALL(Sheet1[Brand ]),[SumSales])
TOP5
Top5 = IF ([Rank] <= 4,[SumSales],
IF(HASONEVALUE(Sheet1[Brand ]),
IF(VALUES(Sheet1[Brand ]) = "Others",
SUMX ( FILTER ( ALL ( Sheet1[Brand ] ), [Rank] > 4 ), [SumSales] )
)
)
)
答案 0 :(得分:2)
这比我预想的要复杂,但仍有可能。
首先,让我们创建一个计算列,对以后要使用的品牌进行排名。
Rank = RANKX(ALL(Sheet1), Sheet1[Sales])
这里的一个关键想法是,您需要一个单独的表作为切片器使用,否则您在进行选择时将无法看到所有品牌。让我们按如下方式定义一个新表Brands
:
Brands = SUMMARIZECOLUMNS(Sheet1[Brand ], Sheet1[Rank])
我们将此表用于切片器。
接下来,我们创建一个相当复杂的度量来合并我们需要的所有逻辑:
Top5 =
VAR BrandRank = SELECTEDVALUE(Brands[Rank])
RETURN IF(MAX(Sheet1[Brand ]) = "Others",
CALCULATE(SUM(Sheet1[Sales]), ALL(Sheet1)) -
CALCULATE(SUM(Sheet1[Sales]), ALL(Sheet1),
Sheet1[Rank] >= BrandRank, Sheet1[Rank] < BrandRank + 5),
IF(COUNTROWS(ALLSELECTED(Brands[Brand ])) = 1,
IF(MAX(Sheet1[Rank]) >= BrandRank &&
MAX(Sheet1[Rank]) < BrandRank + 5,
SUM(Sheet1[Sales]),
BLANK()),
IF(MAX(Sheet1[Rank]) <= 5,
SUM(Sheet1[Sales]),
BLANK())))
然后,您可以在矩阵和圆环图中使用此度量。