【问题标题】:Tricky duplicate control: meeting criterias in Excel array formulas棘手的重复控制:满足 Excel 数组公式中的条件
【发布时间】:2016-07-08 02:23:30
【问题描述】:

有点棘手的问题 - 我可能只需要使用适当的脚本通过 VBA 来完成,但是如果有人真的有一个复杂的答案,(老实说,我不认为有一个超级简单的公式)我是接盘侠我宁愿通过公式做尽可能多的事情。我附上了一个样本。

数据:我有与国家/地区相关的数据。在每个国家/地区,您可以拥有多个站点。对于每个站点,您可能有也可能没有不同的分布。当这些分布符合给定标准时,我想将其记为“中断”并按国家、站点等计算有多少。

它是如何工作的:为此,我使用带有 sumproduct() 的数组公式。好处是您可以轻松添加条件,每个条件都会返回您的 0/1,因此当您将它们相乘时,它会为您提供需要求和的数组,以查看您有多少中断。

问题:我无法格式化公式,以便在同一站点具有 2 种不同分布类型且都满足中断条件的情况下,我可以将每个站点仅计算一次。如果两个分布都满足中断标准,我不想将其记录为 2 个中断,否则我最终可能会得到比站点数量更多的站点记录的中断。部分问题在于我如何解释网站的单一性:

(tdata[siteid]>"")/COUNTIF(tdata[siteid],tdata[siteid] &"")

这实际上是一个 hack,因为与其他公式相反,它不返回 0/1,但可能返回分数。它们确实加起来正确,并且确实允许我正确计算站点的数量,但是数组的格式不是 0/1,因此当与其他 0/1 数组相乘时,它会弄乱结果....

我控制数据,所以我有一些余地。我使用表格(可以看出)并且已经使用了 VBA。如果有帮助,我可以对源表进行排序。源数据:

1 行 = 1 个月内 1 个网站的 1 次分发

我链接的每个国家/地区的汇总表基于这些源数据。

有什么想法吗?

编辑 - 过滤分发并不是一个真正的选择。我已经有一个用于源数据的基于事件的过滤器,并且我已经可以正确计算按分布过滤的数据的指标。但我还需要显示全局数据(目前不工作)。如果我过滤数据(它是大仪表板),还有其他需要计算的指标将不起作用。

EDIT2:换句话说,我需要找到一些方法来解释这样一个事实,即如果在具有相同 siteid 但有 2 个不同分布的 2 个站点中发现相同的标准(是否中断),我想将其计为仅 1 次休息。请记住,如果一个发行版有中断(而另一个没有),我仍然想将其记录为 1 个在该国家/地区有中断的站点。

EDIT3:我决定制作一个新表,分别汇总每个站点的数据(每个站点可能有多次分布)。然后我可以从中计算出全局的东西。

我从中得到的信息是:我认为当您在 Excel 公式中有多个级别的数据(例如国家、站点、具有某种分布的子级别)时,很难不总结中间数据您要关注的分析级别的表格。例如。就我而言,我对国家层面的分析感兴趣,它比分布水平高 2 个“水平”。这意味着从站点级别的角度来看,数据将会“重复”。您也许可以绕过这个,但我认为到目前为止更简单的解决方案是将它吸收并制作一个中间表。我也大大缩短了你的公式。

我没有将此标记为解决方案,因为这不是我想要的。仍然愿意接受更好的建议,只允许使用公式....

文件:https://www.dropbox.com/sh/4ofctha6qhfgtqw/AAD0aPJXr__tononRTpKc1oka?dl=0

【问题讨论】:

    标签: arrays vba excel excel-formula


    【解决方案1】:

    也许以下内容会有所帮助。

    首先,您过滤不符合分配标准的条目。

    在第二步中,您根据列 siteid 从 A 到 Z 对表进行排序。

    然后在最后一列之后使用公式 =C3C4 添加一个额外的列,其中列 C 包含 siteid 条目。这样,所有重复项都由辅助列中的 FALSE 值表示。

    然后过滤此列中的 FALSE 值。

    然后您会获得唯一的网站 ID。

    如果我把你的问题弄错了,我会很高兴更新以帮助你。

    【讨论】:

    • 问题是,如果我想保留基于公式的表格,我不能这样做。如果站点 A 有 2 个分布并且它们都有中断,我不能只过滤 NORM(正态)分布并计算 - 因为站点 B 可能仅针对 TRG(目标)分布有中断。而且我需要将站点内任何类型的分发的休息时间都算作休息时间。用户已经有一个下拉菜单可以选择特定的分发类型 - 问题是我目前无法获得全局图片。还有其他指标我需要计算哪些不适用于这些过滤器...
    • 好吧,如果你从第二步开始,然后省略第一步呢?然后,您将获得唯一的站点 ID。然后必须在上述步骤之前选择用户,以便只显示想要的分布。但只要过滤后的结果按照站点 ID 从 A 到 Z 排序,该过程就应该有效?
    • 沿着有点类似的路线:我实际上是根据计划和实际数字之间的差异来排序(而不是过滤)(例如,如果它高于给定的阈值,那就是休息,这就是我想要找出的)。然后我可以使用 index(match()) 只返回第一个这样的匹配为 1,然后其余为 0。问题在于,只要这是我需要的唯一指标,它就会起作用。现在没关系。如果我有新的要求,它会打破它,我回到第一方,重新审视我“解决”的同一个问题。如果我不能做得更好,那就必须通过 VBA....
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多