首页 > 解决方案 > 使用百分位数、Top n 和 Rank X 时的不同结果

问题描述

https://1drv.ms/u/s!AiSlK-qGPwisrTl4Jr2O2_xlWYkc?e=cGwn2h

请帮助,首先,Top N 和 rankx 为我的前 25% 提供了不同的总和,我不知道为什么。

附上使用的公式

  1. nTop 25 百分比 = VAR Rank_To_Find = COUNTROWS (ALL (Sheet1)) * 0.25 RETURN CALCULATE ([total sale] , FILTER (Sheet1,[Rank]<= Rank_To_Find))

  2. 75% 及以上的销售额百分比(使用总销售额)= VAR Percentile75 = PERCENTILEX.INC( Sheet1, Sheet1[Sales],0.75 ) RETURN CALCULATE([Total sale],Sheet1[Sales] >= Percentile75 )

3)Top 25% Total = var FirstQuart = ROUND(DIVIDE(COUNT(Sheet1[Sales]),4),0) 返回 CALCULATE([total sales],TOPN(FirstQuart, Sheet1,Sheet1Sales],DESC))

都产生了不同的值。我在所附链接中有措施。

其次,我一直在努力获得总和达到一定金额的前 N ​​个订单。

例如,我的总销售额为 1,037,875 美元,我试图获得构成第 75 个百分位及以上的销售额(即总计为 259,468)。

我已经使用订单数量(基于销售额)完成了前 N 个。

我想我需要使用 while 或 for 循环来完成它,但不知道如何去做。

附件是示例数据文件的链接, https://1drv.ms/u/s !AiSlK-qGPwisrTl4Jr2O2_xlWYkc?e=cGwn2h

谢谢

标签: powerbidaxpercentile

解决方案


您根据行数而不是销售额计算出第 75 个百分位数的措施。

让我们从你想要达到的目标开始

为了实现您想要做的事情,您需要摆脱查看行并考虑销售的累积价值。使用干净的数据集(即删除空白行),尝试以下操作。

查看您的数据集,我们正在尝试确定那些落在 75% 以内的销售额。它们将加起来为 259,468.89 的边界;

使用您现有的度量按销售额对数据进行排名

Rank = RANKX (all(Sheet1) ,[Total sale])

添加一个度量来计算累积排名销售额

Cumulative Ranked Sale = CALCULATE([Total sale],FILTER(ALL(Sheet1),[Rank]<=MAXX(Sheet1,[Rank])))

现在您可以根据累积排名销售价值计算出第 75 个百分位的销售额,最高为 259,468.89。

 Cumulative Sales In 75th Percentile = 
 VAR Percentile75 = CALCULATE([Total sale], All(Sheet1))*0.25 

 VAR cumulativeSalesIn75thPercentile  = CALCULATE(
        Sum(Sheet1[Sales]),
        FILTER(
            ALL(Sheet1),
             [Cumulative Ranked Sale]<=Percentile75
        )
    )

RETURN cumulativeSalesIn75thPercentile  

累积第 75 个百分位示例 我在上图中添加了一个单独的度量来显示百分位 75 边界,但您的工作不需要这个,因为这是累积销售额第 75 个百分位中的一个变量

您需要注意,排名将为您提供具有相同排名的多个值,这会影响您的结果。您还需要考虑您希望在 75% 的边界上发生什么,因为断点并不精确。

您可以通过其他措施进一步扩展此逻辑以覆盖第 50-75 个百分位

 Cumulative Sales 50-75th Percentile = 
 VAR Percentile75 = CALCULATE([Total sale], All(Sheet1))*0.25 
 VAR Percentile50 = CALCULATE([Total sale], All(Sheet1))*0.5 

 VAR cumulativeSalesIn50thTo75thPercentile  = CALCULATE(
        Sum(Sheet1[Sales]),
        FILTER(
            ALL(Sheet1),
             [Cumulative Ranked Sale]>Percentile75 && 
             [Cumulative Ranked Sale]<=Percentile50
        )
    )

RETURN cumulativeSalesIn50thTo75thPercentile  

回到你现有的工作

在我们开始之前,附加的示例数据使 RowCount 和 PERCENTILEX.INC 不准确。您有 251 个订单,但您有 685 行,其余为空白行。保持您的样本数据干净,将有助于您未来的 DAX 分析。

您的“nTop 25%”衡量标准是计算行数(不是金额),并为您提供前 25% 行的销售额总和,按销售额排序。变量

VAR Rank_To_Find = COUNTROWS ( ALL (Sheet1) ) * 0.25 

等于 171.25,因为您有 685 行,因此 685*0.25 = 171.25。因此,使用此度量,您将计算前 171 行的总销售额,按销售额降序排列,结果为 932,906.354 美元。

使用“第 75 个百分位及以上的销售额百分比(使用总销售额)”度量,PERCENTILE.INC 是您在行数方面找到第 75 个百分位,而不是累积值。尝试将 k 值更改为低于 60% 的任何值(例如PERCENTILEX.INC( Sheet1, Sheet1[Sales],0.60),您将返回总销售额。


推荐阅读