使用百分位数、Top n 和 Rank X 时的不同结果

Different results when using percentile, Top n and Rank X

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

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

附上所用的公式

  1. n前 25% = VAR Rank_To_Find = COUNTROWS ( ALL (Sheet1) ) * 0.25 RETURN 计算 ( [总销售额] , FILTER ( Sheet1,[Rank]<= Rank_To_Find))

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

3) 总计前 25% = var FirstQuart = ROUND(DIVIDE(COUNT(Sheet1[Sales]),4),0) Return CALCULATE([总销售额],TOPN(FirstQuart, Sheet1,Sheet1Sales],DESC))

所有人都产生了不同的价值。我在附件 link.

中有措施

其次,我一直在尝试获取总计金额的前 N ​​个订单。

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

我用订单数(基于销量)做了前N个。

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

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

谢谢

您计算的第 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  

我在上图中添加了一个单独的度量来显示 Percentile 75 Boundary,但您的工作不需要这个,因为这是 Cumulative Sales 75th Percentile

中的一个变量

您需要注意,排名会给您多个具有相同排名的值,这会影响您的结果。您还需要考虑在 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 ),您将 return 总销售额。