Таблица - Фильтр на основе параметра
У меня есть набор данных дат. Он имеет только один столбец 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