不确定如何构造SQL数据仓库查询

时间:2015-11-07 01:07:13

标签: sql data-warehouse

数据仓库对我来说是一个非常新的概念。我理解基础知识,我正在尝试基于星型模式创建DW。问题是如何构建查询以获取所需的信息 - 我不确定如何做到这一点。 SQL从来都不是我的强项(因此我为什么要练习,因为我不得不使用SQL,所以一直都是这样)。我想在2014年和2015年返回所有地点的利润。有没有人知道如何构建我的查询?

 insert into profitable_county(depot_location,journey_cost, journey_dates, time_weekStart, time_weekEnd, year_, total_2014, total_2015)
 select DepotLocation,Cost,journeyDate,WeekStart,WeekEnd,year,Cost,Cost
 from depot, journeys, time;


 select depot_location, total_2014, total_2015
 from profitable_county 
 where time_weekStart=51;

1 个答案:

答案 0 :(得分:0)

典型的DWH架构将使用详细信息表和聚合表。也就是说,例如,在您的情况下,诸如仓库或旅程的详细信息表将包含详细信息(例如:每个仓库的旅程成本的每日信息)。

然后,根据您的需求,您需要有一个表格,如果您想知道每年的成本,可以更快地检索数据。因此,您不必在详细信息表中获取数千行,而是在聚合表中准备已计算的信息,该聚合表将具有例如每周概要(即一年中的一列,一个用于库的列,一列用于成本...)。

在我看到的查询中,很难说出或回答你的问题。但是,通常,数据仓库SQL脚本将具有“通用”格式。让我们来看一个具有不同销售点的公司案例,并希望了解每个销售点的销售情况。

它拥有的源信息是每个客户的订单。 详细信息表将是第一个信息来源(比如,从您的ERP连接到收据和收银机的信息,然后到您的DWH)。

要在其中插入数据,典型的SQL语句将是:

  INSERT INTO Customer_Orders_History
  SELECT DATE_ID,
  Customer_ID,
  Order_ID,
  Order_Value,
  Point_of_sale
  FROM ERP_DB.Some_Table A
  LEFT JOIN ERP_DB.Some_Table2 B ON A.Customer_ID = B.Customer_ID

现在, 我们转向汇总,其中更容易了解每个销售点的销售额

  INSERT INTO Customer_Orders_History_Aggregation
  SELECT DATE_ID,
  Point_Of_Sale,
  SUM(Order_Value)

  FROM Customer_Orders_History
  GROUP BY DATE_ID,
  Point_Of_Sale

因此,在最后一个汇总表中,了解每个销售点的销售额要容易得多,因为我们必须以更少的行查找您想要的内容。

但是,如果没有提供表的完整描述以及它们之间的链接,则没有一个或一组规则来为DWH执行SQL语句。

编辑: 还有一件重要的事情,在数据仓库SQL语句中,当它即将插入时,请记住这些脚本通常由数据集成工具运行,并且它经常运行(每天,每月......)并且在自动方式。因此,除非您手动执行ETL,否则将日期声明为变量(例如:$ DATE_ID)是必须的:D

希望我有所帮助;)