[英]Weekly Sales Total in Fact Table using SSIS
我有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语法”工具,所以我仍然可以使用查询)
在实际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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.