2

我有一个要求,我需要根据图表中的销售价值获得前 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 个品牌显示为其他所有其他品牌的集合。

当用户从切片器中选择任何品牌(单选)时,该特定品牌应排名 - 第 1 名,和往常一样排在前 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] )
    )
  )
)

在此处输入图像描述

4

1 回答 1

3

这比我预期的要棘手,但仍有可能。


首先,让我们创建一个计算列,对稍后使用的品牌进行排名。

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())))

然后,您可以在矩阵和圆环图中使用此度量。

在此处输入图像描述

于 2018-03-14T16:45:39.717 回答