powerbi - 使用百分位数、Top n 和 Rank X 时的不同结果
问题描述
https://1drv.ms/u/s!AiSlK-qGPwisrTl4Jr2O2_xlWYkc?e=cGwn2h
请帮助,首先,Top N 和 rankx 为我的前 25% 提供了不同的总和,我不知道为什么。
附上使用的公式
nTop 25 百分比 = VAR Rank_To_Find = COUNTROWS (ALL (Sheet1)) * 0.25 RETURN CALCULATE ([total sale] , FILTER (Sheet1,[Rank]<= Rank_To_Find))
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
谢谢
解决方案
您根据行数而不是销售额计算出第 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% 的边界上发生什么,因为断点并不精确。
您可以通过其他措施进一步扩展此逻辑以覆盖第 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
),您将返回总销售额。
推荐阅读
- ubuntu - QEMU Raspberry Pi 仿真,无视频
- postgresql - 为什么 -c 成功时 psql -f COPY FROM STDIN 会失败?
- tensorflow - optimize.minimize “没有为任何变量提供梯度,检查你的图表中不支持梯度的操作,变量之间”
- sql-server - ADO.NET Oracle 连接有效,但同一数据库的 MS ORACLE 源无效
- java - 使用 gradle 和 JUnit5 进行 ByteBuddy 代理测试
- javascript - Discord.js awaitMessages 不返回任何内容并阻止代码
- pattern-matching - 如何修复 TypeError:调用的匹配模式必须是 Python 3.10 中的类型
- python - 我用 Unity 构建了一个游戏。如何使用python玩这个游戏?
- react-native - React Native - 提供全局主题的最佳方式是什么?
- date - 使用字符串类型比较 Go 中的两个日期