Структура данных таблицы фактов Tableau

У меня есть некоторая информация о фильмах в базе данных, упрощенно это выглядит так:

table movie
-----------
id     title
1234   batman
4456   spiderman


table movie_info
-----------------
id    movie_id   info_type_id    info
1     1234       1               USA
2     1234       1               Canada
3     1234       2               Action
3     1234       2               Drama
4     4456       1               France


table info_type
---------------
id   info_type
1    country
2    genre

Что я пытаюсь сделать, так это создать карту, показывающую, где создаются фильмы, а затем попытаться отфильтровать их по жанру. Часть сопоставления работает, но когда я фильтрую по жанру, он показывает все фильмы только тогда, когда я устанавливаю для жанра значение Null в качестве фильтра.

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

Расчетные поля: Страна производства:

IF[info_type_id]=8
THEN [info]
END

Жанр:

IF[info_type_id]=3
THEN [info]
END

Пользовательский SQL (для жанров):

SELECT movie_id, info AS genre
FROM movie_info
WHERE info_type_id=3

person JochenDB    schedule 06.05.2014    source источник
comment
Можете ли вы опубликовать код, который пытается....   -  person Imran Ali Khan    schedule 06.05.2014
comment
Я добавил немного информации. Это довольно просто, я новичок в этом.   -  person JochenDB    schedule 06.05.2014
comment
Вычисляемые поля «Страна производства» и «Жанр» работают нормально, если используются по отдельности, но не вместе.   -  person JochenDB    schedule 06.05.2014


Ответы (1)


Во-первых: это скорее комментарий, чем ответ, но ваша таблица нелогична.

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

Если вы хотите связать числовое значение, создайте отдельную таблицу поиска, чтобы:

Таблица Info_type

id name
1 country
3 genre

И вы бы связали его так же, как и movie_id, поэтому info_type будет 2 или 1, а не текстовое значение.

Что касается вашего фильтра, без кода, я предполагаю, что вы делаете, но код следует этому шаблону:

If [filter] == "ALL"
  return all entries with an info_type of genre (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre"))
Else
  return all entries with the info value of [filter] (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre" and info="[filter]"))

Разница между этими двумя действиями заключается в том, что all действует на значение info_type, а другое действует на значение info. Логика одинакова, независимо от того, выполняете ли вы цикл/выбираете из массива или базы данных.

person Margaret    schedule 06.05.2014
comment
Структура данных действительно была такой, как вы описали, с info_type в отдельной таблице. Я думал, что так будет более понятно, но я отредактировал пост, чтобы сделать его более логичным. - person JochenDB; 07.05.2014