4

我有 3 个销售数据表,已转换为 4 个维度表和 1 个事实表。

我已经正确填充了所有内容,并且希望在我的 Fact 表中显示“每日销售”和“每周销售”。

我原来的3张表如下:

  • Order(order# (PK), product-id (FK), order-date, total-order, customer# (FK))
    域是数字、数字、日期、货币、数字

  • Product(product-id (PK)、prod-name、unit-cost、manufactur-name)
    域是 numeric、nvarchar、money、nvarchar。

  • Customer(客户# (PK)、客户名称、地址、电话#)
    域是 Number、nvarchar、nvarchar、nvarchar

数据仓库的 Star Schema 链接在这里:

在此处输入图像描述

所以我在每个表中只有 10 条记录(很小!),现在只是在测试概念。Fact 表中的“daily-order”很容易从 Order 表中的“total-order”翻译而来。我的困难是获得每周的总数。我使用派生列和表达式 "DATEPART("wk",[order-date])" 在时间维度中创建我的周列。

所以我想我的问题是,我如何从这一点上获得每周销售额?我的第一个猜测是在用于加载事实表的查找序列结束后使用另一个派生列。我的第二个猜测是......在stackoverflow上寻求帮助。任何帮助将不胜感激,我将提供所需的任何信息!提前致谢!

作为记录,我尝试按照前面的描述创建派生列,但无法找出可以接受的语法......

编辑我想按产品级别列出每周销售列,并且当我使用 DATEPART 导出周列时,我不需要最后 7 天,而只需要每周的总数。我的销售数据仅持续 2 周,因此我的事实表应该列出 1 个总共 7 次,第二个总共列出 3 次。我可以从原始 Order 表或我的 DW 环境中的表派生它。最好是后者。需要注意的是,我主要限于 SSIS 及其工具(有“执行 SQL 语法”工具,所以我仍然可以使用查询)

4

1 回答 1

3

在您的 数据流中,在加载每日数据时填充该数量是Fact-sales一项挑战。weekly-order您需要使用多播转换,向其中添加一个聚合来总结您对产品、客户、订单和周的价值。这很容易。问题是您将如何将这些数据与数据流中的实际详细级别信息联系起来。可以做到,Merge Join,但不要。

正如ElectricLlama评论中指出的那样,您要做的是混合您的粒度级别。如果每周金额没有存储在表格中,那么您可以添加所有金额,按您想要的任何维度进行切片。一旦您将每周级别的数据放在同一级别,您的用户将只能汇总每日列。每周的值可能不会是累加的。

我说可能是因为您可以通过累积每周值来伪造它,但只将它们存储在任意记录中:一周的第一天,第三天,最后一天,等等。这解决了加法问题,但现在用户必须记住一周中的哪一天保存了一周的汇总值。另外,除非他们在您选择解决附加价值问题的一周中的确切日期下订单,否则您将为该汇总行生成虚假订单记录。

正确的、未经请求的解决方案是weekly-order从事实表中删除 并增强您的数据维度以允许人们确定每周的金额。如果您不将数据带出仓库并进入分析引擎,则可以预先计算每周汇总并将其具体化为报告表/视图。

源数据

让我们看一个简单的场景。一个客户下了 3 个订单,同一天有两个相同的产品(可能一个是加急发货,其他标准)

SalesDate |Customer|Product|Order|Amount
2013-01-01|1       |20     |77   |30
2013-01-01|1       |30     |77   |10
2013-01-02|1       |20     |88   |1
2013-01-02|1       |20     |99   |19

事实表

您的用户会将他们选择的工具指向桌面,您将接到电话,因为数字不正确。或者您稍后会接到电话,因为他们只需要重新订购 50 件产品时,他们补充了 150 件产品 20。我不想接听这些电话。

SalesDate |Customer|Product|Order|daily-order|weekly-order
2013-01-01|1       |20     |77   |30         |50
2013-01-01|1       |30     |77   |10         |10
2013-01-02|1       |20     |88   |1          |50
2013-01-02|1       |20     |99   |19         |50
于 2013-04-08T01:44:49.850 回答