由于前一个任务已经完成而指示任务已经准备就绪的公式[解决方案]

坦纳Polzin
坦纳Polzin ✭✭✭✭✭✭
编辑07/26/21 最佳实践

我看到过许多帖子,人们希望能够指示特定的任务/行已经准备好开始,因为所有的前一个任务都已经完成(其中许多都已存档)。所有提出的解决方案都有不足之处(例如,只能处理具有单个FS前任且没有延迟的行)。这是我对这个问题的完整解决方案。

注1:我没有对此进行广泛测试。它在大的纸张上可能表现不佳。

注2:在本例中,我选择只与FS前辈一起工作(因为这对我来说是有意义的)。但是,我在下面指出要更改哪个公式,以便它可以与任何前类型一起工作。

解决方案可以通过添加至少2列到您现有的表格,

但为了便于理解,我将用6列来布局这个解释。

我将在最后提供2列解。

在这里

是我使用的6个列名:行ID,行ID逗号,Pred替换FS, Pred

计数、预完成计数和就绪状态

绿色的列可以转换为列公式。不幸的是,我不知道如何使用列公式获得可靠的行ID列。

image.png


第1列:行ID

1美元=条件统计([任务名称]:[任务名称]@row,或(@cell = " ", @cell < > " "))

在本例中,我引用了[Task Name]列,但可以使用任何列。我从另一个帖子里偷了这个公式,感谢Paul Newcome。不管你如何移动、复制、粘贴行,这个公式都有效。唯一的缺点是它不能是列式公式。https://community.smartsheet.com/discussion/69476/row-numbers

第2列:行ID,逗号

=", " +[行ID]@行+ ","

这一列实际上是通过计数公式来查找的。需要使用逗号来避免错误的阳性匹配(例如,防止在“20”中找到“2”,查找“,2,”不会在“,20,”中找到“,20,”

第三列: Pred替换FS

=", " +替换((电子邮件保护)," fs ",",") + ","

这个公式在“前任”列的开头和结尾添加了所需的逗号,并将“FS”更改为逗号(需要确保有延迟的FS前任仍然可以工作)。使用更多嵌套的替代公式修改此公式,使其可根据需要与其他前身类型(FF、SS、SF)一起使用。

列4: Pred Count

=COUNT(COLLECT([行号逗号]:[行号逗号],[行号逗号]:[行号逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, [Pred Replace FS]@row) > 0)))

这个公式计算[行ID逗号](查看每一行)在[Pred Replace FS]列(仅限当前行)中找到的行数。

列5: Pred Done Count

=COUNT(COLLECT([行ID逗号]:[行ID逗号],[行ID逗号]:[行ID逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, [Pred Replace FS]@row) > 0), [% Complete]:[% Complete], 1))

这类似于[Pred Count]列,除了它添加了一个附加条件:% Complete列也必须等于100%。此条件可以更改为指向不同的列(例如复选框列,状态列等)。

列6:就绪状态

=IF([Pred Done Count]@row = [Pred Count]@row, "Ready", "Waiting")

此列比较[预预计数]列和[预预完成计数]列。如果计数匹配,则所有前一个都结束。

2列方案:

image.png


第1列:一个公式行ID

= " +条件统计([任务名称]1美元:[任务名称]@row,或(@cell @cell = " <> "")) + ","

我将[Row ID]和[Row ID Comma]组合成一个公式。这不能是列式。

第2列:一个公式就绪状态

=IF(COUNT(COLLECT([行号逗号]:[行号逗号],[行号逗号]:[行号逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, ", " + replace ((电子邮件保护)," FS", ",") + ",") > 0), [% Complete]:[% Complete], 1)) = COUNT(COLLECT([行号逗号]:[行号逗号],[行号逗号]:[行号逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, "," + replace ((电子邮件保护)," FS", ",") + ",") > 0))), "准备好了","等待")

我将[Pred Replace FS], [Pred Count], [Pred Done Count]和[Ready Status]组合成一个公式。这可以转换为列公式。

评论

  • 她名叫Stara
    她名叫Stara ✭✭✭✭✭✭
    编辑02/02/21

    @tpolz

    很好地完成了!

    谢谢分享!

    注意安全,祝你有一个美好的一周!

    最好的

    她名叫Stara工作流顾问/ CEO @工作大胆

    Smartsheet专家顾问和合作伙伴

    她名叫Stara工作流顾问/ CEO @工作大胆

    W:www.workbold.com| E:(电子邮件保护)| p: +46 (0) - 72 - 510 99 35

    关于Smartsheet、集成、一般工作流建议或其他方面的帮助,请随时与我联系。

  • 坦纳Polzin
    坦纳Polzin ✭✭✭✭✭✭

    在我最初的帖子之后,我意识到两件事。首先,我的2列解中的公式仍然引用了Row ID的旧6列解。其次,可以通过将每个嵌套的COUNT(COLLECT(公式替换为单个COUNTIFS(公式)来缩短公式。这是所有更新的公式。


    6列方案更新:

    列4: Pred Count

    =COUNTIFS([行ID逗号]:[行ID逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, [Pred替换FS]@row) > 0))

    列5: Pred Done Count

    =COUNTIFS([行ID逗号]:[行ID逗号],AND(NOT(ISBLANK(@cell)), FIND(@cell, [Pred Replace FS]@row) > 0), [% Complete]:[% Complete], 1)


    2列方案更新:

    第2列:一个公式就绪状态

    =IF(COUNTIFS([一个公式行ID]:[一个公式行ID], AND(NOT(ISBLANK(@cell)), FIND(@cell, ", " +替换((电子邮件保护)," FS", ",") + ",") > 0),[%完整]:[%完整],1)= COUNTIFS([一个公式行ID]:[一个公式行ID], AND(NOT(ISBLANK(@cell)), FIND(@cell, "," +替换((电子邮件保护)," FS", ",") + ",") > 0)), "准备好了","等待")



    父母排奖励:

    最后,我注意到这些公式在父行上“工作”,但不是人们“希望”它们工作的方式。如果至少有一个子行表示就绪,我预计父行只会说“就绪”。这可以通过在最终输出公式中添加一个额外的IF语句来轻松实现,该语句将计算表示“就绪”的子语句的数量。下面是两个解的完整最终公式。

    6列解,“就绪状态”栏:

    =如果(数孩子()= 0, IF([Pred Done Count]@row = [Pred Count]@row, "Ready", "Waiting"), IF(COUNTIF(CHILDREN(), @cell = "Ready") > 0, "Ready", "Waiting"))

    2“一公式就绪状态”栏解:

    =IF(COUNT(CHILDREN()) = 0, IF(COUNTIFS([一个公式行ID]:[一个公式行ID], AND(NOT(ISBLANK(@cell)),查找(@cell, ", " +替换((电子邮件保护)," FS", ",") + ",") > 0),[%完整]:[%完整],1)= COUNTIFS([一个公式行ID]:[一个公式行ID], AND(NOT(ISBLANK(@cell)), FIND(@cell, "," +替换((电子邮件保护),“FS ", ",") + ",") > 0)),“准备好了”,“等待”),如果(条件统计(儿童(),@cell =“准备好”)> 0,“准备好了”,“等待”))

  • SJ卖家
    SJ卖家 ✭✭✭

    坦纳,这太棒了。谢谢你分享你的解决方案!

    我希望SmartSheet本身就能提供这个功能,因为许多日程管理工具,如Asana都有这个功能。它允许每个任务的所有者知道他们是否可以开始工作。

    我刚刚在我负责的一个复杂的工作计划中实施了这一点,并将在这里报告任何观察和发现。

    再次感谢Tanner解决了这个问题并分享了你的方法!!

  • 坦纳Polzin
    坦纳Polzin ✭✭✭✭✭✭

    @SJ卖家不客气。在两年多的时间里,我慢慢了解了Smartsheet公式的功能,突然间,我在一个项目中强烈地需要它。然后我花了几天时间才把所有的碎片拼在一起。我希望这篇文章能帮助其他有同样需求的人。

  • @Tanner Polzin...很棒的解决方案!虽然我很难适应这个公式。

    这在处理标准前任时很有效。然而,当与其他任何事情一起工作时,它会考虑那些“前任”是在它更改为就绪之前需要完成的,而实际上它们只是用于计时而不是真正的前任。明白吗?

    例如,对于开发中的大多数任务,我都有自己的标准工作进度计划。然而,一些与销售或营销相关的任务是为了时间安排而向后工作的任务,例如,我们在几乎准备好发布产品之前不需要PO,并且在需要PO前一个月才能开始销售。ob欧宝娱乐app手机下载我们不能过早地完成这个任务,所以这是一个从产品版本开始的工作。ob欧宝娱乐app手机下载

    是否有一种方法来调整Pred替换FS公式忽略非前任?

    如果你能帮忙,我很感激?

  • 坦纳Polzin
    坦纳Polzin ✭✭✭✭✭✭

    @Matt斯图尔特

    如果我说错了请指正,但听起来你们有从开始到结束的前辈?你是对的,我的公式忽略了那些类型的前辈。

    我相信您真正想要的是将状态设置为“就绪”时,今天的日期是在计划的开始日期之前(基于前任)?如果是这样,您不应该编辑Pred Replace FS。相反,您应该编辑Ready Status。你只需要在开始时添加一个IF语句(如果Pred Count为0,那么根据开始日期确定就绪/等待,否则做公式已经在做的事情。

    这是我的建议。斜体部分是我在开头添加的IF语句(在最后加上一个括号,以结束新的IF语句。

    IF([Pred Count]@row = 0, IF(NETDAYS((电子邮件保护),今天()> 0,“准备好了”,“等待”),IF(COUNT(CHILDREN()) = 0, IF([Pred Done COUNT]@row = [Pred COUNT]@row, "Ready", "Waiting"), IF(COUNTIF(CHILDREN(), @cell = "Ready") > 0, "Ready", "Waiting"))

  • 尼尔·沃森
    尼尔·沃森 ✭✭✭✭✭✭

    @Tanner Polzin我正在使用你的方法,它对FS很有效,但是正如你上面指出的,FF, SS和SF的公式需要修改。你提到使用更多嵌套的替代公式,使其与其他前任类型一起工作,但我不能让它工作。你能详细说明一下吗?

  • 坦纳Polzin
    坦纳Polzin ✭✭✭✭✭✭

    @Neil沃森很抱歉,由于我现在的工作量,我不能帮你这个忙。此外,我发现很难为其他前身类型(FF、SS和SF)提出一个通用的解决方案。

    对于正常的FS前身,对于每个人都希望它如何操作,这是相当直截了当的。只有当前一个“完成”时,后一个才“准备好”。

    然而,对于其他类型的前任,我认为不同的人会想要不同的结果。以SF为例。假设Task2是Task1的后继任务,那么在Task2中,前一列是1SF。这意味着Task2应该在Task1之前完成,那么Task2什么时候可以开始呢?前任列可以将我指向Task1,但是Task1没有告诉我Task2何时准备启动。当今天的日期超过Task2的计划开始日期(我在前一篇文章中给出了解决方案)时,您可以将此自动更改为“就绪”。然而,“就绪”一栏的目的是说它可以随时工作,不管日期如何,所以我假设其他人希望它是不同的。

    您需要非常清楚地定义您希望为每个其他前任类型发生什么。在此之后,我建议您实现我目前的7列解决方案。然后尝试分别修改每一列,然后再合并回3列(您可能需要添加更多列)。

  • 尼尔·沃森
    尼尔·沃森 ✭✭✭✭✭✭

    @Tanner Polzin谢谢你的真知灼见。由于我们主要只使用另一种变体(SS),所以我将使用您的多列方法,使其适用于FS和SS。