来自同一累积事实表的独立和独立计数

时间:2011-09-12 03:31:59

标签: ssas mdx data-warehouse business-intelligence dimensional-modeling

所以,我有一个Sales Fact表,它基于事务生命周期模型(或累积事实快照表),有很多不同的日期键列(如销售日期,退款日期等)。我为每个日期列制定了不同的度量,即非空销售日期密钥列的总和是[销售数量],非空退款日期密钥列的总和是[退款数量]等。日期键列与不同的日期键维度相关。销售日期维度和退款日期维度是角色扮演维度,所有维度都基于相同的DimDate表。还有其他非基于日期的维度,但是为了这个例子,我会保持简单 - storeType还有另外一个维度(零售,电子商务等)

当我浏览多维数据集时(因为大多数用户将通过excel浏览和浏览多维数据集)我可以将[销售数量]和[退款数量]拖到列部分,然后我可以拖动StoreType维度行部分,它正确地显示数据:


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           10                8
eCommerce        5                 2

这很好,因为我没有应用任何日期过滤器,因此它显示了所有内容。我已经确认了Fact表中的数据,事实上,数字是正确的。

但后来我想对[销售数量]和[退款数量]应用相同的日期过滤器 - 所以我将这两个维度拖到过滤器区域,并对两者应用相同的日期过滤器 - 和当然,两列的数字都是相同的:


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           5                 4
eCommerce        5                 4

..因为我认为通过有效地对日期维度应用一个日期,我将过滤到同一组行(因为它们来自同一个表)。我知道这是不正确的,因为我可以从Fact表中查询各个行,看看它们有不同的值。

基本上,我想要的是将两列一起显示,但实际上它们没有任何共同点。我甚至可能在每一列上都有两个不同的日期过滤器,即显示2010财年的所有销售额,并显示2011财年的所有退款。这也是用户完全可以浏览的,因此必须在不必做复杂的MDX查询。

我想我可以创建另一个事实表来在事务事实表中保存相同的数据,然后我可以单独计算它 - 但是让两个单独的事实表或多或少计算相同的事情是没有意义的。

知道怎么做吗?帮助!!

1 个答案:

答案 0 :(得分:0)

听起来您可能需要将case语句应用于聚合列。有点像这样:

SELECT StoreType
     , SUM(CASE WHEN SalesCol IS NOT NULL THEN 1 ELSE NULL END) AS NumSales
     , SUM(CASE WHEN RefundCol IS NOT NULL THEN 1 ELSE NULL END) AS NumRefunds
FROM FactTable
WHERE SaleDate BETWEEN Date1 AND Date2
GROUP BY 1