簡體   English   中英

Power Bi中的動態排名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM