DAX:根据其他条件返回不同的列值

时间:2020-04-30 21:00:27

标签: powerbi dax powerbi-desktop

我有一个表,其相关列为:ProjectName,TaskNo,AssignedTo和Status。数据看起来像这样:

--------------------------------------------------------------
|   ProjectName   |   TaskNo   |   AssignedTo   |   Status   |
+-----------------+------------+----------------+------------+
|   Project1      |   00300    |   Database     | In Process |
+-----------------+------------+----------------+------------+
|   Project2      |   02200    |   Alfred       | In Process |
+-----------------+------------+----------------+------------+
|   Project2      |   00300    |   Database     | In Process |
+-----------------+------------+----------------+------------+
|   Project3      |   02200    |   Alfred       |   Complete |
+-----------------+------------+----------------+------------+
|   Project3      |   00900    |   Database     | In Process |
+-----------------+------------+----------------+------------+
|   Project4      |   02200    |   Alfred       |   Complete |
+-----------------+------------+----------------+------------+
|   Project4      |   01200    |   Database     |   Complete |
+-----------------+------------+----------------+------------+
|   Project4      |   00300    |   Database     |Not Started |
+-----------------+------------+----------------+------------+

每个项目有大约两个十几个任务编号,它们分配给许多不同的组。 我想在其中输出ProjectName的列表

TaskNo 02200的状态为“完成”且 至少有一项任务分配给数据库未完成。

从上表中,我想要的输出将是:

-------------------
|   ProjectName   |
+-----------------+
|   Project3      |
+-----------------+
|   Project4      |
-------------------

我已经设法通过以下FILTER表达式过滤了非常大的列表-到了02200的未完成数据库任务:

FILTER (
'Project Tasks',
    OR (
'Project Tasks'[Title] = "02200"
&& 'Project Tasks'[Status] = "Completed",
'Project Tasks'[GroupAssignedTo] = "Database"
&& 'Project Tasks'[Status] <> "Completed"
    )
)

我似乎无法完全解决问题-在此过滤表中查找满足两个条件的

1 个答案:

答案 0 :(得分:2)

诀窍在于,您需要将每个ProjectName分组考虑,而不是逐行考虑。

为此,我们使用SUMMARIZE function

FilteredProjects =
VAR Summary =
    SUMMARIZE (
        'Project Tasks',
        'Project Tasks'[ProjectName],
        "02200 Complete", COUNTROWS (
            FILTER (
                'Project Tasks',
                'Project Tasks'[TaskNo] = "02200"
                    && 'Project Tasks'[Status] = "Complete"
            )
        ) > 0,
        "Database Not Complete", COUNTROWS (
            FILTER (
                'Project Tasks',
                'Project Tasks'[AssignedTo] = "Database"
                    && 'Project Tasks'[Status] <> "Complete"
            )
        ) > 0
    )
RETURN
    SELECTCOLUMNS (
        FILTER ( Summary, [02200 Complete] && [Database Not Complete] ),
        "ProjectName", 'Project Tasks'[ProjectName]
    )

因此,对于每个ProjectName组,您都要检查该子表是否具有满足指定条件的任何行。然后,您可以筛选出满足这两个条件的条件,然后只提取所需的一列。

Summary表在过滤并剥离到一列之前是这样的:

-----------------------------------------------------------------
|   ProjectName   |   0200 Complete  |   Database Not Complete  |
+-----------------+------------------+--------------------------+
|   Project1      |   False          |   True                   |
+-----------------+------------------+--------------------------+
|   Project2      |   False          |   True                   |
+-----------------+------------------+--------------------------+
|   Project3      |   True           |   True                   |
+-----------------+------------------+--------------------------+
|   Project4      |   True           |   True                   |
-----------------------------------------------------------------
相关问题