【问题标题】:Different results when using percentile, Top n and Rank X使用百分位数、Top n 和 Rank X 时的不同结果
【发布时间】:2021-03-17 04:26:06
【问题描述】:

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 返回 CALCULATE ([total sale] , FILTER (Sheet1,[Rank]

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

3)前 25% 总计 = var FirstQuart = ROUND(DIVIDE(COUNT(Sheet1[Sales]),4),0) 返回 CALCULATE([总销售额],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

谢谢

【问题讨论】:

    标签: powerbi dax percentile


    【解决方案1】:

    根据行数而非销售额计算出第 75 个百分位数的度量。

    让我们从您想要实现的目标开始

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

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

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

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

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

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

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

     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% 的边界上发生什么,因为断点并不精确。

    您可以进一步扩展此逻辑,以通过其他措施覆盖第 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 ),您将返回总销售额。

    【讨论】:

    • 感谢@Darryl 抽出宝贵时间。我已经清理了数据并看到了错误。我已经完成了解决方案,但我不清楚有些事情。首先,您如何计算前 25% 的累计销售额。其次,它是否可以扩展到其他四分位数,例如第二个 25%、第三个 25% 和最后一个 25%?我只是很困惑,而且是 Power bi 的新手。谢谢
    • Bolaji,我已经修改了这个例子来帮助解释,希望这更清楚。我还添加了第 2 个 25% 的示例,希望能帮助您进行此操作。
    • @Darryl,谢谢。我已经离线一段时间了。我已经完成了修改并花时间去理解它。它运作良好。非常感谢。
    猜你喜欢
    • 2021-09-28
    • 2019-06-02
    • 2020-07-16
    • 2022-07-29
    • 2011-08-22
    • 2013-08-08
    • 2014-09-06
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多