所以,我有一个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查询。
我想我可以创建另一个事实表来在事务事实表中保存相同的数据,然后我可以单独计算它 - 但是让两个单独的事实表或多或少计算相同的事情是没有意义的。
知道怎么做吗?帮助!!
答案 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