Таблица - Фильтр на основе параметра

У меня есть набор данных дат. Он имеет только один столбец CreatedOnDate, и его значения указаны в datetime, как показано ниже.

Этот набор данных имеет значения за 6 месяцев, как показано. У меня есть параметр с именем Тип отчета, который имеет возможные значения Ежемесячно, Еженедельно, Ежедневно (снимок экрана ниже)

Я создал вычисляемое поле (называемое " Дата создания"), которое преобразует дату на основе выбранного типа отчета. Формула показана ниже

CASE [Report Type]
    WHEN "Monthly" THEN DATENAME('month', [CreatedOnDate])
    WHEN "Weekly" THEN "Week " + STR(DATEPART('week',[CreatedOnDate]))
    WHEN "Daily" THEN STR(MONTH([CreatedOnDate])) + "/" + STR(DAY([CreatedOnDate])) + "/" + STR(YEAR([CreatedOnDate]))
END

Это работает отлично. Результат вычисленного поля показан ниже.

Теперь мне нужно включить следующую логику

IFF Report Type = "Daily" Display only the last 30 days in the dataset
Other cases Show all values

Как мне этого добиться?

2 ответа

Решение

woodhead92, я бы предложил использовать так называемые выражения уровня детализации, которые были введены в Tableau v8. Сначала создайте вычисляемое поле, которое будет вычислять самую последнюю доступную (=MAX) дату:

{FIXED : MAX(CreatedOnDate) }

Давайте назовем это MaxDate LOD. Затем добавляем новое вычисляемое поле Показать / Скрыть:

IF [Report Type] = "Daily" AND 
  ([CreatedOnDate] >= DATEADD('day', -30, [MaxDate LOD]) THEN 'Show'
ELSEIF [Report Type] = "Weekly" OR [Report Type] = "Monthly" THEN 'Show'
ELSE 'Hide'
END

Добавьте этот фильтр и выберите только значение "Показать". Я предполагаю, что вы хотите видеть все даты, когда выбрана гранулярность по неделям / месяцам - если это не так, просто добавьте больше условий ELSEIF.

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

Следует помнить одну вещь - при расчете FIXED LOD фильтры перезаписываются, поэтому, если у вас есть доступный фильтр диапазона дат, вам необходимо убедиться, что он добавлен в контекст. Более подробная информация о контексте фильтра доступна здесь, в этом немного устаревшем, но все же отличном сообщении в блоге.

Создайте вычисляемое поле для вашего условия и затем поместите его на полку фильтра, чтобы включить только строки, которые оцениваются как истинные.

[Report Date] <> "Daily" or 
datediff('day', [CreatedOnDate], { max[CreatedOnDate] } < 30

Фигурные скобки значимы, расчет LOD

Другие вопросы по тегам