Tableau事实表数据结构

时间:2014-05-06 07:16:53

标签: data-modeling 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作为过滤器时..

我在计算字段中尝试了很多东西,并在movie_id上​​将自定义SQL加入数据源,但似乎没有任何工作。如果有人能指出我正确的方向来解决这个问题,我将不胜感激。

计算字段: 制作国家:

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

1 个答案:

答案 0 :(得分:1)

首先:这是一个评论而不是一个答案,但你的表格布局是不合逻辑的。

ID字段传统上是唯一标识符。相反,您正在使用它来复制您的info_type。我认为这是一个错字,除了你使用伪代码部分中的数值作为info_type_id。

如果要关联数值,请使用单独的查找表:

表格信息类型

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值起作用。无论您是从数组还是数据库中进行循环/选择,逻辑都是一样的。