Power BI 将切片器逻辑从 OR 更改为 AND

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

我有一张看起来像这样的桌子:

| Person ID |  Date |  Day     | AM/PM |
|-—---------|-—-----|-—--------|-—-----|
|  1        | 5/6/24|   Friday | am    |
|  2.       | 5/6/24|   Friday | pm    |
|  2.       | 8/6/24|   Monday | am    |
|  3.       | 5/6/24|   Friday | am    |
|  4.       | 8/6/24|   Monday | am    |

我有一个切片器,可以让我选择两个或更多选项,例如星期五下午和星期一上午。

这将返回包含周五下午和周一上午的所有项目的行。

我想要的只是人员 ID 满足两个条件的项目:周五下午 周一上午。 我还获得了仅具有一个条件的项目的行。这似乎意味着过滤器在我想要 AND 逻辑的地方使用 OR 逻辑。 有没有办法配置这个效果。
我无法过滤表格,因为我需要从数据库返回所有项目,因为有时我可能需要有不同的标准,即星期四上午和星期二上午。

所需输出

在这种情况下,我只想返回 ID 2,因为它有星期五下午和星期一上午。

| Person ID |  Date |  Day     | AM/PM |
|-—---------|-—-----|-—--------|-—-----|
|  2.       | 5/6/24|  Friday  | pm    |
|  2.       | 8/6/24|  Monday   am    |

报告上的此表是通过下拉菜单生成的,有数百行,其中有许多重复的 ID,但在此示例中只有 2 个 ID,一个用于周五,一个用于周一。

powerbi dax powerbi-desktop
3个回答
1
投票

首先,通过合并包含 WeekdayTime period 的两列来创建一个新列。
对于此示例,我将此列称为Weekday_Time

Sample data

此后,创建一个将用作视觉效果过滤器的度量。

IsUserFiltered = 
VAR _numberOfWeekdays = 
    IF(ISFILTERED(Users[Weekday_Time]), COUNTROWS(ALLSELECTED(Users[Weekday_Time])), 0)

RETURN 
    IF(_numberOfWeekdays = 0, 
        1,
        IF(DISTINCTCOUNT(Users[Weekday_Time]) = _numberOfWeekdays, 1, 0))

此措施将检查 Weekday_Time 列是否已过滤,如果未过滤,则显示所有数据。
如果过滤了 Weekday_Time 列,则对于 Weekday_Time 与所选用户匹配的用户,它将返回 1。

现在将此度量添加为视觉效果中的过滤器,条件为 IS 1:

Filter applied on the visual

由于您的视觉效果将使用 AND 逻辑而不是 OR,因此请务必记住,只要行匹配,它就会仅显示数据。
这意味着,例如,如果您在切片器上选择Monday PMTuesday AM,并且您的表格视觉对象仅具有 UserId,则它将显示 ID 1,因为它匹配这两个条件 (AND)。
如果您的表格视觉对象有更多列,则它不会显示任何数据,因为 UserId 将匹配这两个条件,但其他列不会(星期一下午星期一下午星期二上午不匹配) ).

Filtered table example


1
投票

然后你可以创建一个新列

Column=
VAR _fp =
    MAXX (
        FILTER (
            'Table',
            'Table'[ID] = EARLIER ( 'Table'[ID] )
                && 'Table'[Day] = "Friday"
                && 'Table'[AM/PM] = "pm"
        ),
        'Table'[Day]
    )
VAR _ma =
    MAXX (
        FILTER (
            'Table',
            'Table'[ID] = EARLIER ( 'Table'[ID] )
                && 'Table'[Day] = "Monday"
                && 'Table'[AM/PM] = "am"
        ),
        'Table'[Day]
    )
RETURN
    IF ( _fp <> "" && _ma <> "", "y" )

enter image description here

然后创建一个过滤器来设置列=“y”以获得ID 2。


0
投票

您可以尝试创建一个新列

Column 2 = 
IF (
    'Table'[week] = "Monday"
        && 'Table'[column] = "AM"
        || 'Table'[week] = "Friday"
        && 'Table'[column] = "PM",
    "Friday PM and Monday AM"
)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.