2016-10-06 4 views
1

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

enter image description here

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

enter image description here

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

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 

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

enter image description here

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

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

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

ответ

1

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

{FIXED : MAX(CreatedOnDate) } 

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

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 

Добавить этот фильтр и выберите только 'Show' значение. Я предполагаю, что вы хотите видеть все даты, когда выбрана Еженедельная/месячная гранулярность - если это не так, просто добавьте еще ELSEIF условий.

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

Одна вещь, чтобы иметь в виду - FIXED расчет LOD перезаписывает фильтров, так что если у вас есть фильтр дата-диапазон доступных, вы должны убедиться, что он добавлен в контексте. Более подробную информацию о контексте фильтра можно найти здесь: this a bit out-dated, but still excellent blog post.

0

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

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

Скобки Curley значительны, расчет LOD

Смежные вопросы