[英]Dynamic ranking in power bi
我有一個要求,我需要根據圖表中的銷售價值獲得前5名品牌。
場景如下:樣例數據如下
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
現在,要求始終根據銷售額顯示前5個品牌。 也就是說,前4個品牌和第5個品牌顯示為“其他”,匯總了所有其他其余品牌。
當用戶從切片機中選擇任何品牌時(一次選擇),該特定品牌應排名-排名第一,通常是下一個前3個品牌,最后一個是“其他”,將其余的分組。
我設法獲得了前4名品牌和其他品牌。 但是,只能依靠切片器的選擇來獲得動態排名。
請查看我創建的以下措施:
銷售總和
SumSales = SUM(Sheet1[Sales])
秩
Rank = RANKX(ALL(Sheet1[Brand ]),[SumSales])
前5
Top5 = IF ([Rank] <= 4,[SumSales],
IF(HASONEVALUE(Sheet1[Brand ]),
IF(VALUES(Sheet1[Brand ]) = "Others",
SUMX ( FILTER ( ALL ( Sheet1[Brand ] ), [Rank] > 4 ), [SumSales] )
)
)
)
這比我預期的要難,但仍然可能。
首先,讓我們創建一個計算列,對以后使用的品牌進行排名。
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())))
然后,您可以在矩陣和甜甜圈圖中使用此度量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.