Tableau 最近发布了2020.2版本中的逻辑数据模型(The Tableau Data Model),而这一直以来是微软 Power BI 的核心之一。Power BI 的"tabular"模型在 Microsoft 各个产品之间具有共享的沿袭,诸如Power Pivot for Excel 和 Analysis Services,这些产品早于 Power BI 本身,他们拥有相同的引擎。
以下是在 Tableau中定义的简单模型:
以下是在 Power BI 中定义的相同的简单模型:
在 2020.2版本发布之前,Tableau 允许表和表之间进行联结。不过,功能也只是和Power Query中的合并查询类似,将多个表合并为一个。这个功能,现在还在。
而随着 Tableau 2020.2 版本中逻辑模型的引入,单个逻辑表可能由一个或多个物理表组成。两个或多个逻辑表可能彼此相关。这个方法与微软的tabular模型有许多相似之处,但是这并不代表你可以类比在Power BI中的建模方式在Tableau中操作。
之前的一篇文章:从另一个BI平台迁移到BI时应避免的五个错误
文中提到:
“如果要构建Power BI报表以替换旧平台上的现有报表,并询问用户他们希望报表的外观,则最常见的答复是“就像旧的一样”。这是危险信号!如果你正尝试使其执行原本不打算执行的操作,那么结果就是Power BI报表难以构建且运行灰常缓慢。”
同样的道理,企图直接用Power BI中的建模思想在Tableau中进行建模是不可取的。
所以。接下来说一下 Tableau 和 Power BI 之间的逻辑数据建模之间的四个核心区别:
一、多个事实表
Tableau支持多个事实表是其发展逻辑模型的初步尝试,然而逻辑模型却不支持多个事实表指向多个维度,这就奇怪了。
在 Power BI 中,我们通常使用多个事实表来构建数据模型,这些模型一般情况下都会与多个维度相关,如下图所示,上方三个维度表, 下方两个事实表:
但是在Tableau中,只能建立这样的模型,我就想问,这样的模型有啥意义吗?
Tableau的帮助文档《The Tableau Data Model》中有一个“不支持模型”(Unsupported models)的部分:
- Multiple fact tables related to multiple shared dimension tables. In some use cases it is common to have multiple fact tables related to multiple shared dimension tables. For example, you might have two fact tables, Store Sales and Internet Sales, related to two common dimension tables, Date and Customer. Typically, such scenarios would require creating a circular relationship in your data model. Circular relationships are not supported in 2020.2.You can approximate this type of model by merging some of the tables in the physical layer. For example, you might be able to union Store Sales and Internet Sales into a single table, which can then be related to Date and Customer. Alternatively, you might be able to cross-join Date and Customer to create a single dimension table which can then be related to Store Sales and Internet Sales.
- Directly relating 3 or more fact tables on shared dimensions. While it is possible to build this model in the logical layer, you might see unwanted results, unless you only use dimensions from a single table.
对于这种不支持的模型,Tableau提供了一种变通的办法:将两张事实表合并成一个表。Tableau还提供了另一种方法:交叉联结维度表。但是过来人告诉你,千万别用,使用谁“草鸡(cǎo jī)”。唯一的建议就是赶紧向Power BI学习,不过,如果完全和Power BI一样,那也就失去了意义,在别人的预设阵地上跟别人拼刺刀,可能就是找死,所以创新出比Power BI还要棒的模型,是当务之急,否则也是死路一条。
二、使用多个字段定义关系
我们知道,Power BI 的tabular模型仅允许由单个字段定义的关系,两张表中如果想对多个字段建立关系,也只能是虚线的未激活的关系,当激活了该关系时,另一个关系相应地就成了未激活。
所以在 Power BI 中,如果需要在多个字段上定义关系,则必须通过将字段串联在一起手动构建该复合键作为解决方法。例如,如果需要基于省份和城市创建地理关系,则最终将创建具有"山东青岛"等值的复合键,而不是单独在"省份"字段和城市字段上分别关联。
不过呢,Tableau 却允许我们在多个字段上定义关系:
如果是之前一直使用Power BI,那么很可能已经习惯了,当看到Tableau这种骚操作会觉得很惊奇,然后爱不释手。
不过如果是感受过了Tableau的美好,再回到Power BI中,很有可能会掉到坑里去。
三、激活关系和非激活关系
Tableau 和 Power BI 都只允许表之间有单个激活关系。不过,Power BI 允许两个表之间有多个非激活的关系。使用 DAX 度量值可以激活这些非活动关系,并在需要时将已存在的活动关系关闭掉。
比较常见的场景是:事实表中有多个日期,如订单日期和发货日期。通过度量值的激活与否来控制到底使用哪一个关系。但是更多的情况是,我们可以通过建立两个维度的日期表来分别控制这两个日期,这才是最佳实践。
但是,Tableau 不允许表之间的多个关系,非激活的也不行。
四、双向关系
在一对多关系中,Power BI 允许从一侧到多个(单方向)以及从多侧到一个(两个方向)之间的筛选器。除了特殊情况之外,Power BI 中通常不鼓励使用双向关系,因为如果模型中有多个指向同一维度的事实表,则它们可能会导致意外错误的结果。但是呢,在极少数情况下,双向关系偶尔也能产生比较好的作用从而实现目的。比如页面的权限控制一文中说过的:PowerBI 个性化定制你的报告导航
参考文档:
https://help.tableau.com/v2020.2/pro/desktop/en-us/datasource_datamodel.htm
https://www.kasperonbi.com/power-bi-desktop-dynamic-security-cheat-sheet/
最近学习了一下Tableau。Tableau还是比较贵的,不过某宝上几十大洋拿到了一年的授权。但是一年后肯定过期啊,还得重新买。这个时候parallels desktop的作用就出来了。轻松无限使用。