来自Star Schema的非常宽的BI报告

时间:2016-04-25 16:04:31

标签: sql data-warehouse dimensional-modeling star-schema

我正在考虑使用维度建模/星型模式仓库来支持现有的商业智能报告流程(显然我希望能够支持其他甚至尚未实现的BI任务),并且我有一个非常基本的问题,了解我的最终用户如何编写我认为应该是一个非常简单的查询。

在SQL星型模式中考虑一个与销售业务流程相关的事实表,其中包含单个订单。当前的BI报告按时间和地理位置整理数据(对于每个美国州,每周常见一行)。它报告了许多列中的实际销售数字,这些数字总体上是详尽且相互排斥的(MECE:如果您要将它们全部加在一起,您就会知道该州当周发生了多少销售)。

可能会有很多这样的专栏,在一些报告中有数百个,因为它被不同的产品,销售渠道等切割。

最终用户如何轻松地编写这样的查询,并确保它们是MECE?显然,您可以使用大型CASE ... WHEN块,但这依赖于用户或BI工具强制执行捕获所有内容的规则。什么是反映for each combination of sales channel and product in this list of combinations, make a column. For any combination not in the list, group into 'other'的任务的常用技术?

我可以想象一些PL / *脚本会编写不正常的CASE ... WHEN块,其中最后一列会有数百条条件语句,但我很难相信这是一种有效的方法。

使用块时的案例查询:

SELECT date.week, geography.state, CASE WHEN channel.channel = 'DIRECT' AND product.name = 'ITEM 1' THEN SUM(sales.values) ELSE 0 as direct_item_1, CASE WHEN channel.channel = 'AFFILIATE' AND product.name = 'ITEM 5' THEN SUM(sales.values) ELSE 0 as affiliate_item_5, CASE WHEN NOT ((channel.channel = 'DIRECT' AND product.name = 'ITEM 1') OR (channel.channel = 'AFFILIATE' AND product.name = 'ITEM 5')) THEN SUM(sales.values) ELSE 0 as other FROM sales, channel, product, date, geography WHEN date.date_key = sales.date_key AND geography.geo_key = sales.geo_key AND channel.channel_key = sales.channel_key AND product.product_key = sales.product_key GROUP BY date.week, geography.state

0 个答案:

没有答案