我有一张看起来像这样的桌子:
| 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,一个用于周五,一个用于周一。
首先,通过合并包含 Weekday 和 Time period 的两列来创建一个新列。
对于此示例,我将此列称为Weekday_Time。
此后,创建一个将用作视觉效果过滤器的度量。
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:
由于您的视觉效果将使用 AND 逻辑而不是 OR,因此请务必记住,只要行匹配,它就会仅显示数据。
这意味着,例如,如果您在切片器上选择Monday PM 和Tuesday AM,并且您的表格视觉对象仅具有 UserId,则它将显示 ID 1,因为它匹配这两个条件 (AND)。
如果您的表格视觉对象有更多列,则它不会显示任何数据,因为 UserId 将匹配这两个条件,但其他列不会(星期一下午与星期一下午和星期二上午不匹配) ).
然后你可以创建一个新列
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" )
然后创建一个过滤器来设置列=“y”以获得ID 2。