没有重复等级的排名
我最近第一次使用RANKEQ函数,并意识到任何相同的值将具有相同的秩。它会跳过你有多少重复的排名数字,所以你可能有一个排名方案看起来像1,2,3,3,3,6,7,7,9,9。
这在某些情况下可能有用,但在其他情况下实际上是有问题的。假设我正在搜索集合中前10个值。我找不到4 5 8或10的值。如果我只想从数据集中绘制出前10个值,这当然会令人沮丧。
我创建了以下公式来忽略重复项,并简单地将任何重复项的秩加1。这意味着任何副本之间都有一个任意的排名。
在这个公式中,“A”是被排序的列。
排名= RANKEQ ((电子邮件保护), a: a) + countif (a $1:(电子邮件保护), RANKEQ(@cell, A:A) = RANKEQ((电子邮件保护)答:a)) - 1
希望这对某些人有所帮助!
评论
-
吉纳维芙P。 员工管理
感谢您与社区分享您的解决方案!
0 -
杰夫瑞斯曼 ✭✭✭✭✭
非常感谢这个公式!这是我的救命稻草。我用它作为基于多种标准的排名的基础。我希望以下可以添加到您的解决方案,以帮助下一个有类似问题的人:
我有一张表格,每个月重新填充三个不同仓库的扫描错误数据,每个月的每一天。每一行列出日期、仓库号、型号号以及记录的扫描错误数。我需要能够找到前5个模型与大多数扫描错误为每个仓库,为每一天。所以在2020年1月12日,4000号仓库会有前5名,4200号仓库会有前5名,4300号仓库会有前5名。我需要能够在一个指标表上显示这些数据,其中用户选择日期,系统显示每个仓库该日期的Top 5数据。
根据这个标准,我可以得到每个仓库的每个日期的排名,但当然我有重复的排名。当我尝试您的公式时,试图将标准嵌入到COUNTIF中的RANKEQ公式中,总是返回一个#NESTED criteria错误。所以令人沮丧!
在我的数据表中,我有列的日期(日期),型号#(材料),扫描错误#(数量,)排名(排名)和一个仓库号连接到一年的一天基于日期列(whday)。whday列将仓库号和日期组合到一个字段中,以标识给定日期中给定仓库的所有行。我有另一个名为Number的列,它只是一个从1往上数到400的数字列(大约是一个给定月份的数据行数)。
= RANKEQ ((电子邮件保护)收集(数量:数量,[WH-Day]: [WH-Day], [WH-Day] @row), 0) +条件统计(数量:1美元(电子邮件保护)RANKEQ (@cell收集(数量:数量,[WH-Day]: [WH-Day], [WH-Day] @row), 0) = RANKEQ ((电子邮件保护)收集(数量:数量,[WH-Day]: [WH-Day], [WH-Day] @row), 0)) - 1
这导致了#NESTED CRITERIA错误。我尝试对标准进行各种更改,得到的要么是#UNPARSEABLE,要么是#INVALID DATA TYPE。上面的各个部分工作正常,直到我有了整个COUNTIF部分,然后嵌套的标准出错。
我最后做的是为三个仓库分别创建辅助表。我的源数据按日期升序排序,然后按仓库号升序排序。对于给定的日期,每个仓库的行都在Number列的连续范围内。
在我的帮助表中,我有以下内容:
(日期1个单元格链接从我的指标表(用户输入选择日期)。我明白了YearDay值(
=如果(YEARDAY ((电子邮件保护)< 10, "00", if (yearday ((电子邮件保护)< 100, "0") + yearday ((电子邮件保护))
)及WH列,我将仓库号连接到YearDay值((加入(“4000”+ =价值(电子邮件保护)))
)使用MIN和MAX我拉开始的数字和结束的数字为WH值进入NumRefMin而且NumRefMax第一行的列:
=MIN(COLLECT({仓库扫描错误数据号},{仓库扫描错误数据日期},(电子邮件保护)))
我拿起材料的值。NumberRef值,如果NumberRef<= toNumRefMax:
=如果((电子邮件保护)< VALUE(NumRefMax1 + 1), INDEX({仓库扫描错误数据Mat}, MATCH((电子邮件保护),{仓库扫描错误数据数},0),1),"")
我明白了数量使用相同的标准。使用IF可以避免没有匹配值时的#NO MATCH或其他错误。
一旦我有了材料而且数量只有这个仓库在这一天的价值,我可以使用Preston的公式得到我的排名没有重复!同样,我使用IF来避免任何单元格中的错误值。
=如果((电子邮件保护)> 0,RANKEQ ((电子邮件保护),数量:数量)+ COUNTIF(数量2美元:(电子邮件保护), RANKEQ(@cell, Qty:Qty) = RANKEQ((电子邮件保护),数量:数量))- 1”、“)
对于每个仓库,使用单独的助手表,我可以将数据拉到指标表中,从而获得所需的正确排名和值。用户选择一个有效的日期,点击保存,数据在几秒钟内更新(当单元格更新时以蓝色闪烁)。
1 -
普雷斯顿墨菲 ✭
哇! !我真的很高兴这有帮助!看起来你真的把Smartsheet推向了极限,在这里做了一些高级的东西。感谢楼主分享!
0 -
是否有一种方法可以在不使用@cell的情况下做到这一点?我试图纠正这在一个表上,我需要能够转换为列公式和@cell不允许列公式?
1 -
林赛·惠特布莱德 ✭✭✭✭✭✭
没有副本的等级通常被称为“密集等级”。
我创造了这个公式来制造密集的队列。它需要一个辅助公式,该公式包含RANKEQ提供的“稀疏”秩。
从概念上讲,你用RANKEQ创建一个稀疏秩,然后你对稀疏秩进行排序来创建一个密集秩…然后将正确的密秩映射到每个稀疏秩。
在这个例子中,我将最小的值排列到数字1。
助手列,我称之为“项目稀疏排名”:
=IFERROR(RANKEQ([项目值]@row,[项目值]:[项目值],1),"")
让它成为列公式
然后你做出你的密集排列:
=IFERROR(RANKEQ([Item Sparse Rank]@row, DISTINCT([Item Sparse Rank]:[Item Sparse Rank]), 1), "")
把它变成列式。现在,我根据我自己的公式调整了这些公式,使之通用,所以如果它们实际上不起作用,请告诉我。
欢呼,
林赛
Smartsheet Lead @ DataSpark
黄金智能表合作伙伴| www.dataspark.com.au
0 -
刘易斯水域 ✭✭✭✭✭✭
嗨,林赛,
这给我一个无效的数据类型在密集秩字段。什么好主意吗?
0 -
刘易斯水域 ✭✭✭✭✭✭
Preston的解决方案很棒,但我真正想要的是有相同排名和排名不被跳过的副本。即
一个1
一个1
B2
C3
C3
D4
0 -
刘易斯水域 ✭✭✭✭✭✭
当我在稀疏秩上使用=value时,它似乎成功了!
0