почему мой вычисленный косяк не может быть применен в таблице моих фильтров

#tableau-api

#tableau-api

Вопрос:

это моя рабочая тетрадь tableau

введите описание изображения здесь

итак, я хочу рассчитать день, различный для каждой транзакции для каждого пользователя, пользователи в этом случае находятся в filters PUL: True с этим расчетом

 {Fixed [User Id]: sum(
if [Created At]<=[END_DATE] then 1 else 0 end)}>=2
AND
{FIXED [User Id]: sum(
IF [Created At]<=[END_DATE] AND 
[Created At] >= [START_DATE] THEN 1 ELSE 0 END)}>=1
 

это означает, что в списке есть пользователи с более чем 1 транзакцией до последнего диапазона и, по крайней мере, выполняющие 1 транзакцию в диапазоне дат.

итак, после этого я сделал вычисляемое поле для подсчета дня другим с помощью этой формулы [CF]

 DATEDIFF('day',LOOKUP(MIN([Created At]),-1), MIN([Created At]))
 

а также я создал диапазон дат фильтров

 lookup(min(([Created At])),0) >= [START_DATE] and 
lookup(min(([Created At])),0) <= [END_DATE]
 

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

итак, это результаты (пожалуйста, взгляните на user_id 86886)

введите описание изображения здесь

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

введите описание изображения здесь

мои вопросы

  1. почему таблица не может визуализировать всю транзакцию в один и тот же день (но в другое время) следующим образом

введите описание изображения здесь

и как это визуализировать, чтобы в нем отображались 2 записи с одним и тем же днем, но в разное время.

  1. а также почему, если транзакция в тот же день подсчитывает время, отличное от NULL, вместо этого оно должно быть 0, потому что время не отличается

введите описание изображения здесь

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ (давайте рассмотрим случай с идентификатором пользователя 86886)

  --------- ----------------------- ------------- 
| user_Id |    dayOfCreatedAt     | CF diff day |
 --------- ----------------------- ------------- 
|   86886 | 1/25/2020 11:25:28 AM |             |
|         | 1/25/2020 11:39:42 AM |          0  |
 --------- ----------------------- ------------- 
 

пояснения: первый из CF diff day становится НУЛЕВЫМ, потому что это первая транзакция этого пользователя, и пользователь до этого больше не выполнял транзакцию, а второй был «0», потому что нет другого дня, разница была только в час, но, хотя это был тот же день, так чтоне будет другого дня, и он будет равен 0

основываясь на совете @Anil, это моя ссылка на таблицу рабочей книги https://public.tableau.com/profile/fachry .dzaky #!/vizhome/simulation_data/Sheet14

Комментарии:

1. Небольшой совет: вы можете опубликовать ссылку на свою общедоступную рабочую книгу Tableau, чтобы эксперты по SO, не знающие об этом, могли предложить что-то лучшее и новые решения.

Ответ №1:

Я думаю, что в вашем поле PUL есть некоторые ошибки. Вероятно, вам следует изменить вычисление этого поля как

 {Fixed [User Id]: sum(
if [Created At]<[START_DATE] then 1 else 0 end)}>=1
AND
{FIXED [User Id]: sum(
IF [Created At]<=[END_DATE] AND 
[Created At] >= [START_DATE] THEN 1 ELSE 0 END)}>=1
 

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

Теперь, пожалуйста, выполните следующие действия (внимательно, пожалуйста)

Шаг-1 Перетаскивание user id и created at на полке строк.

Шаг-2 Измените created at на точную дату, а затем на discreet (оба важны, и ваш просмотр показывает, что вы не отобразили его как точную дату и как день created_at вместо этого)

Шаг 3: задайте параметры даты

Шаг-4 Перетащите все три желаемых поля на полку фильтров.

Шаг * 5: добавление PUL в контекст (опять важный шаг)

Шаг-6 дважды щелкните CF поле (проверьте его вычисление как

 DATEDIFF('day', LOOKUP(MIN([Created At]),-1), MIN([Created At]))
 

Шаг-7 Измените параметры вычисления таблицы CF как таблицы (проверьте, что это также важно)

Шаг-8 дважды щелкните другие поля CF_max / Min, чтобы добавить их в measure values

Шаг-9 измените параметры вычисления таблицы в каждом из этих четырех полей, как обсуждалось ранее (т.Е. Вложенное вычисление CF при specific dimensions перезапуске при каждом user_id). И вложенное вычисление CF_Max (в зависимости от обстоятельств) в таблицу вниз.

Обратите внимание на вашу конкретную проблему 86886 с идентификатором пользователя (если я удалю исправленное условие PUL, поскольку TRUE я получаю тот же вид, что и желаемый). Посмотрите, пожалуйста

введите описание изображения здесь

Комментарии:

1. Итак, в основном проблемы, которые я могу определить, — это (i) day (createdAt) вместо exact date amp; discreet, (ii) параметры вычисления таблицы в CF и (iii) параметры вычисления таблицы во вложенных вычислениях всех четырех полей, где вам нужно исправить как агрегированное поле, так и CF.

2. я думаю, что ваш расчет PUL неверен, потому что, когда пользователи выполняют транзакцию более 1 в диапазоне дат (между start_date и end_date), тогда ее не будет в списке, вместо этого она должна быть, потому что, пока пользователи выполняют транзакцию для более чем 1 транзакции и имеютпо крайней мере, 1 транзакция в диапазоне дат, она должна быть в списке PUL

3. а также, между каждой транзакцией пользователей PUL нет минус другого дня, потому что он увидит последнюю транзакцию перед первой транзакцией в диапазоне (если таковая имеется), но если этого не произошло, и это первая транзакция, то день разницы должен быть равен 0. вот почему вы предлагаете мне в диапазоне дат поставитьвычисления, подобные этому lookup(min(([Created At])),0) >= [START_DATE] and lookup(min(([Created At])),0) <= [END_DATE]

4. я думаю, что это может быть NULL , если первая транзакция, которая находится в диапазоне дат, является первой транзакцией этих пользователей, так что это означает, что раньше транзакции не было (посмотрите на мои ожидаемые результаты). 0 разный день происходит, когда в один и тот же день выполняются 2 транзакции или более с одним и тем же идентификатором пользователя, поэтому это может быть 0 значение diff day, подобное ожидаемым результатам

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