从同一个累积事实表中分离和独立的计数
Posted
技术标签:
【中文标题】从同一个累积事实表中分离和独立的计数【英文标题】:Separate and independent counts from the same accumulating fact table 【发布时间】:2011-09-12 03:31:58 【问题描述】:所以,我有一个销售事实表,它基于交易生命周期模型(或累积事实快照表),具有许多不同的日期键列(如销售日期、退款日期等)。我对每个日期列做了不同的度量,即非空销售日期键列的总和是[销售额],非空退款日期键列的总和是[退款数]等。每个的日期键列与不同的日期键维度相关。销售日期维度和退款日期维度是角色扮演维度,均基于同一个 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】:听起来您可能需要将 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
【讨论】:
以上是关于从同一个累积事实表中分离和独立的计数的主要内容,如果未能解决你的问题,请参考以下文章