我有3个销售数据表,我已将其转换为4个维度表和1个事实表。
我已正确填充所有内容,并且我希望在Fact表中进行“每日销售”和“每周销售”。
我原来的3个表格如下:
Order
(订单#(PK),产品ID(FK),订单日期,总订单,客户#(FK))
域名是数字,数字,日期,货币,数字
Product
(产品ID(PK),产品名称,单位成本,制造商名称)
域名是数字,nvarchar,money,nvarchar。
Customer
(客户#(PK),客户名称,地址,电话号码#)
域名是Number,nvarchar,nvarchar,nvarchar
数据仓库的Star Schema链接在这里:
所以我每张桌子只有10条记录(很小!),现在只是测试概念。 Fact表中的“daily-order”可以从Order表中的“total-order”轻松翻译。我的困难在于获得每周总数。我使用派生列和表达式“DATEPART(”wk“,[order-date])”在时间维度中创建我的周列。
所以我想我的问题是,如何从这一点获得每周销售额?我的第一个猜测是在用于加载Fact表的Lookup序列结束后使用另一个派生列。我的第二个猜测是.....在stackoverflow上寻求帮助。任何帮助将不胜感激,我将提供所需的任何信息!提前谢谢!
对于记录我尝试创建派生列,如前所述,但无法找出可接受的语法....
编辑我想按产品级别列出每周销售列,并且因为我使用DATEPART来获取周列,我不需要过去7天,而只是每周的总计。我的销售数据仅连续2周延伸,因此我的事实表应该总共列出1次7次,总共3次。我可以从原始的Order表或我在DW环境中的表中派生出来。优选后者。需要注意的是,我主要限于SSIS及其工具(有“执行SQL语法”工具,所以我仍然可以使用查询)
答案 0 :(得分:3)
在Fact-sales
的数据流中,当您加载每日数据时,挑战以填充weekly-order
金额。您需要使用多播转换,向其添加聚合以汇总产品,客户,订单和周的价值。这很简单。问题是如何将数据与数据流中的实际详细级别信息联系起来。它可以完成,合并加入,但不要。
正如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