DAX - 仅计算最后完成的任务

问题描述 投票:0回答:1

我有一个表格列出了每个项目的任务。每个项目都有相同数量的任务,并且它们可以是“已完成”或“正在进行”。任务不必按顺序完成,因此任务列表可以看起来像这样:

  Project 1 - 1 - Completed
  Project 1 - 2 - Completed
  Project 1 - 3 - In progress
  Project 1 - 4 - Completed
  Project 1 - 5 - In progress
  Project 2 - 1 - Completed
  Project 2 - 2 - In progress
  Project 2 - 3 - In progress
  Project 2 - 4 - In progress
  Project 2 - 5 - Completed
  Project 3 - 1 - Completed
  Project 3 - 2 - In progress
  Project 3 - 3 - In progress
  Project 3 - 4 - In progress
  Project 3 - 5 - Completed

我想要想出的是一种显示上次完成任务的计数的方法。因此,如果我要绘制上面的列表,它应该显示为:

 1 - 0
 2 - 0
 3 - 0
 4 - 1
 5 - 2

对我来说,每个项目都可以轻松完成,例如

 CALCULATE(
     MAX(task),
     Status = "Completed")

但我无法弄清楚总体上如何做到这一点。

powerbi dax
1个回答
0
投票

要创建一个汇总表,显示在特定步骤中具有最终“已完成”任务的项目数量,您可以在度量内使用虚拟表,并按过滤器上下文中的当前任务对其进行过滤。这将识别哪些项目具有与当前任务匹配的最后完成的任务。

测量

Count Num Of Proj = 
VAR CurrentTask = MAX('Table'[Task])
VAR _table = SUMMARIZE(
    ALL('Table'),
    'Table'[Project],
    "MaxTaskCompleted", CALCULATE(
        MAX('Table'[Task]),
        'Table'[Status] = "Completed"
    )
)

VAR _filteredTable = FILTER(
    _table,
    [MaxTaskCompleted] = CurrentTask
)
RETURN IF(ISEMPTY(_filteredTable), 0, COUNTROWS(_filteredTable)
  • 我将当前任务作为变量存储在过滤器上下文中
    'CurrentTask'
    以便稍后引用。
  • 之后,我按“项目”总结主表,并确定每个项目的最后一个“已完成”任务(请参阅下面的屏幕截图以了解想法)。
    • ALL('Table')
      将清除所有过滤器并访问未过滤的表。如果没有这个,Power BI 将按筛选上下文中的当前任务筛选主表。
    • CALCULATE()
      查找特定项目已完成状态的最高任务值。
  • 然后,我通过过滤器上下文中的当前任务来过滤虚拟表
  • 最后,我计算行数以确定项目总数(“项目”上的 DISTINCTCOUNT 也是可能的)(参见下面的屏幕截图)。如果过滤后的表为空,我返回 0,否则返回行数。

虚拟表 enter image description here

最终结果

enter image description here

备注:

  • 使用 DAX Studio 测试此度量的性能,因为每次过滤器上下文更改时它都会重新计算虚拟表。一些优化仍然是可能的。
© www.soinside.com 2019 - 2024. All rights reserved.