Plsql 在Amazon Redshift中合并事实表

Plsql 在Amazon Redshift中合并事实表,plsql,amazon-redshift,data-warehouse,fact,Plsql,Amazon Redshift,Data Warehouse,Fact,我尝试在Amazon Redshift中构建一个星系模式。我从所有维度开始,通过一些变通方法,我让他们使用SCD2-金球风格 现在我想让一些事实表工作起来。我们公司的实际情况很难计算,所以我为每个KPI都做了一个“视图”。我试着用一种简单的方式来说明它,所以你可以用一个简单的例子来帮助我解决我的问题:让我们假设这是3个不同的视图,让我们命名它们: 他们已经被时间总结了 事实收入 事实许可证 事实成本 我现在试图实现的是将它们合并到一个大事实表中,该表包含所有三者的信息。但我真的不知道怎么做: 事

我尝试在Amazon Redshift中构建一个星系模式。我从所有维度开始,通过一些变通方法,我让他们使用SCD2-金球风格

现在我想让一些事实表工作起来。我们公司的实际情况很难计算,所以我为每个KPI都做了一个“视图”。我试着用一种简单的方式来说明它,所以你可以用一个简单的例子来帮助我解决我的问题:让我们假设这是3个不同的视图,让我们命名它们: 他们已经被时间总结了

事实收入

事实许可证

事实成本

我现在试图实现的是将它们合并到一个大事实表中,该表包含所有三者的信息。但我真的不知道怎么做:

事实


如果你能帮我解决这个问题,那就太好了。提前非常感谢。

这些表之间有什么关系吗?我假设
time
customer
列是外键,但假设您还有一个具有相同值的数据,那么您的选择将是重复的。如果没有相同值的数据,可以使用以下语句:

select * from fact_revenue rev 
left join fact_licences li on li.time=rev.time and li.customer=rev.customer
left join fact_costs co on co.time=rev.time and co.customer =rev.customer

这些表之间有什么关系吗?我假设
time
customer
列是外键,但假设您还有一个具有相同值的数据,那么您的选择将是重复的。如果没有相同值的数据,可以使用以下语句:

select * from fact_revenue rev 
left join fact_licences li on li.time=rev.time and li.customer=rev.customer
left join fact_costs co on co.time=rev.time and co.customer =rev.customer

我不确定redshift支持什么语法,但这是标准模式

SELECT  
Time,Customer,
MAX(Revenue) As Revenue, MAX(Licences) As Licences,MAX(Costs) As Costs
FROM 
(
SELECT Time,Customer,Revenue,NULL as Licences,NULL As Costs
FROM FactRevenue
UNION ALL
SELECT Time,Customer,NULL,Licences,NULL
FROM FactLicences
UNION ALL
SELECT Time,Customer,NULL,NULL,Costs
FROM FactLicences
) As MyTable
GROUP BY Time,Customer

我不确定redshift支持什么语法,但这是标准模式

SELECT  
Time,Customer,
MAX(Revenue) As Revenue, MAX(Licences) As Licences,MAX(Costs) As Costs
FROM 
(
SELECT Time,Customer,Revenue,NULL as Licences,NULL As Costs
FROM FactRevenue
UNION ALL
SELECT Time,Customer,NULL,Licences,NULL
FROM FactLicences
UNION ALL
SELECT Time,Customer,NULL,NULL,Costs
FROM FactLicences
) As MyTable
GROUP BY Time,Customer

你好,谢谢你的回答。只有当主事实表包含任何维度外键的所有可能值时,左联接才是一个选项。在你的声明中,我会丢失关于日期“2020-03-31”的信息。这实际上是我的主要问题。我没有拿着一张包含所有可能的维度键组合的表,所以我需要把它们放在一起,形成我所有的事实表。嗨,谢谢你的回答。只有当主事实表包含任何维度外键的所有可能值时,左联接才是一个选项。在你的声明中,我会丢失关于日期“2020-03-31”的信息。这实际上是我的主要问题。我没有一个包含所有可能的维度键组合的表,所以我需要将它们组合在一起,形成我所有的事实表