在表格链接期间,我们会有循环,这会导致报告中出现重复记录,因此要克服我们使用Context
和Alias
。
在某种程度上,我知道两者都有相同的目的,但两者之间有什么区别,哪一个更有效。
我知道的一件事是alias创建了更多的表,但所有表都是逻辑结构,所以别名对上下文更有用吗?
答案 0 :(得分:4)
这有点像问,什么是更有用的工具:扳手还是螺丝刀?这取决于手头的任务。
别名创建其他逻辑表是正确的。有时这是理想的方法,但并非总是如此。
我解决问题的一种方法是首先确定单个物理维度是否有多个逻辑维度。
例如,考虑一个包含两个日期键的事实表:transaction_dt_key
,completed_dt_key
。这两者都与date_key
表中的date_dim
字段相关联。当然,如果要将两个事实字段连接到日期调暗表,您将创建一个循环。在这种情况下,别名是合适的 - 您可以为dim表添加别名,将事实键连接到原始和别名表,然后创建与别名表关联的新对象。
另一种看待这个例子的方法是,交易日期和完成日期是两个不同的东西。因此,将它们用两个不同的对象表示是合适的,并且可以通过别名来实现。
在这方面,Universe中的设计将更接近于数据集市的逻辑设计,而不是其物理设计。
另一方面,当相同的维度表与多个事实表相关联时,上下文非常有用。考虑这个例子:模型有
customer_dim
store_dim
sales_fact
returns_fact
两个事实表都有customer_id
和store_id
字段。连接所有键将创建一个循环。在这种情况下,上下文是合适的 - 一个上下文包含sales_fact
和两个dims,另一个上下文包括returns_fact
和两个dims。
答案 1 :(得分:0)
它们都用于控制宇宙中的循环。 就个人而言,我在同一个宇宙中都使用过它们。它们可以是互补的。 我完全同意乔的解释和例子。 由于可以在模型上实际看到别名,因此维护可以比上下文更具挑战性。