繁体   English   中英

计算的度量仅在某些单元格上聚合

[英]Calculated Measure aggregating on certain cells only

我试图弄清楚如何创建一个计算出的量度,该量度在我的事实表中仅生成唯一的事实计数。 我的事实表基本上是从历史角度存储事件的。 但是我需要采取措施来过滤掉多余的事件。
以销售为例(由于OLAP周围的所有材料始终在示例中使用销售):

事实表存储销售活动。 首次进行销售时,它具有唯一的销售参考,该参考是事实表中的一列。 但是,可以更改唯一销售(添加或退回项目)或完全取消销售。 事实表将这些更改存储在不同行中。

如果我使用SSAS创建计数度量,那么我将获得所有销售事件的计数,这意味着对每次销售所做的每次更改都会对其进行多次计数(在某些报告中是可取的)。 但是,我还想要一种能够产生唯一销售计数而不是事件的度量,而不仅仅是基于唯一销售参考计数。 如果用户按日期进行过滤,那么他们应该会看到在该日期仍然存在的唯一销售(如果在该日期之前取消了销售,那么根本就不应该代表该销售)。

我将如何在MDX / SSAS中执行此操作? 似乎我需要从查询子集中找到一个计数查询工作,该查询根据时间维度找到对销售的最新更改。 在SQL中,它将类似于:

SELECT COUNT(*) FROM SalesFacts FACT1 WHERE Event <> 'Cancelled' AND
Timestamp = (SELECT MAX(Timestamp) FROM SalesFact FACT2 WHERE FACT1.SalesRef=FACT2.SalesRef)

在MDX中是否可能或事件执行者具有子查询?

在SSAS中,创建基于唯一交易ID(销售编号或订单编号)的度量,然后在属性窗口中将该度量设为“ DistinctCount”聚合函数。

现在,它应该计算不同的订单号,无论它位于哪个尺寸切片下。

发布的查询可能会被这样重写:

SELECT COUNT(DISTINCT SalesRef)
FROM SalesFacts
WHERE Event <> 'Cancelled'

一个简单的答案就是在事实视图/ dsv查询中有一个“销售计数”列,为“初始”事件提供1,为该事件的所有后续修订提供0,如果事件被取消则为-1。 。 这种“新闻发布”方法可以很好地处理事实表的增量负载。

从长远来看,另一种可能更有用的方法是使用“事件”维度:您可以暴露一个计算得出的度量,该度量是事实表中给定度量上该维度中成员的数量为非空。 但是,对于销售而言,这实际上是退化的维度(基于事实表的维度),并且可能会变得非常大。 这可能是不合适的。

有时要求可能会更复杂。 如果时间片,你需要知道的一切存在的 ,即使他们后来被取消了不同的事件? 这开始变得棘手:克里斯·韦伯(Chris Webb)的博客上最近发表了一篇文章,他在其中谈论一种(略带毛)的解决方案:

http://cwebbbi.wordpress.com/2011/01/22/solving-the-events-in-progress-problem-in-mdx-part-2role-playing-measure-groups/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM