Как использовать срез Power BI для фильтрации двух столбцов таблицы

У меня есть таблица времени входа и выхода некоторых людей вроде этого:

Name   | EnterTime | ExitTime
=============================
Tom    | 13:52:00  | 20:55:00

Robert | 15:55:00  | 21:12:00

Sarah  | 19:08:00  | 19:48:00

Jack   | 16:54:00  | 17:32:00

Я хочу показать пользователю, что в выбранный момент времени кто-то присутствует.

Другими словами, я хочу иметь слайсер dateTime, в котором пользователь выберет время, а затем таблица будет отфильтрована, чтобы отображать только строки с:

EnterTime < selectedTime < ExitTime

person HamedH    schedule 30.07.2019    source источник


Ответы (1)


Это можно сделать за несколько шагов.

Во-первых, нам нужен список дат, который будет помещен в наш слайсер. Если вы используете отдельную таблицу дат, это отличный источник. В противном случае вы можете создать его с помощью DAX, который будет содержать все даты в столбцах EnterTime и ExitTime.

Щелкните «Создать таблицу» на ленте моделирования. Вставьте следующий DAX:

DateListTable = UNION(
    SELECTCOLUMNS('MyTable', "DateList", 'MyTable'[EnterTime]),
    SELECTCOLUMNS('MyTable',"DateList", 'MyTable'[ExitTime])
)

Теперь у вас есть слайсер и визуальный элемент таблицы. Выберите срез, а затем перейдите на ленту форматирования (она доступна только тогда, когда выбран визуальный элемент. Используйте «Редактировать взаимодействия», чтобы отключить фильтрацию среза в таблице. Установите для него режим «Нет взаимодействия» (круг с диагональной линией через него).

Создать новую меру

ShowDate = 

VAR SelectedDate = SELECTEDVALUE('DateListTable'[DateList], BLANK())

Return 
    if(SelectedDate >= Max('MyTable'[EnterTime ]) && SelectedDate <= max('MyTable'[ExitTime]), 1, 0)

Наконец, отфильтруйте визуальный элемент таблицы по новому показателю ShowDate, если он равен 1.

Итак, мы создаем независимый слайсер с полным списком дат. Но мы нарушаем любые отношения фильтров между ним и таблицей. Вместо этого мы используем SelectedValue для захвата значения, выбранного из фильтра, и создаем меру dax, которая показывает «1», когда значение в фильтре находится между EnterTime и временем выхода. Отфильтруйте эту меру dax, и мы получим желаемое поведение.

person Ryan B.    schedule 30.07.2019
comment
Я протестировал это, и это сработало, но есть ли у использования меры для этих сценариев какие-либо недостатки? Есть ли какое-либо решение, которое не требует фильтрации всего визуального элемента по мере? - person HamedH; 01.08.2019
comment
Использование фильтра в качестве меры имеет смысл только на уровне строки. Таким образом, это имеет значение только для таблиц конечного уровня и не будет работать правильно в совокупности. - person Ryan B.; 01.08.2019