#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 транзакции в день. это скриншот
мои вопросы
- почему таблица не может визуализировать всю транзакцию в один и тот же день (но в другое время) следующим образом
и как это визуализировать, чтобы в нем отображались 2 записи с одним и тем же днем, но в разное время.
- а также почему, если транзакция в тот же день подсчитывает время, отличное от 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 в соответствии с требуемым сценарием. Тем не менее представление будет работать, если вы будете применять вычисления, как описано. Пожалуйста, внимательно обратите внимание на каждый шаг.