DAX: возвращать различные значения столбца на основе других условий - PullRequest
1 голос
/ 01 мая 2020

У меня есть таблица с соответствующими столбцами: 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 имеет статус Завершено И Для Базы данных назначена как минимум 1 задача, которая не Завершена.

Из приведенной выше таблицы мой желаемый вывод будет:

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

Мне удалось несколько отфильтровать очень большой список - до Завершенных 02200 и незавершенных задач базы данных с этим FILTER выражением:

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

Я могу ' Похоже, что до конца - найти в этой отфильтрованной таблице, удовлетворяющей двум условиям.

1 Ответ

2 голосов
/ 01 мая 2020

Хитрость в том, что вам нужно учитывать каждый ProjectName в группе, а не просто строка за строкой.

Чтобы сделать это, давайте использовать функцию SUMMARIZE :

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                   |
-----------------------------------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...