1

假设我有一个具有两个不同的不同计数度量的多维数据集,称它们为Measure1Measure2。这两个度量都包含一个共同的维度 ,Dimension1这两个度量都计算了该维度。

我需要做的是Dimension1Measure1Measure2在根据需要对每个度量进行适当过滤之后,返回存在于和中的不同成员计数。

我可以分别定义 MDX 查询Measure1Measure2获得不同的计数,但我需要能够“重叠”结果以避免重复计算两个集合中存在的成员。

注意:在实际场景中,涉及的度量不止2个,所有MDX查询都会动态构造(用户定义包含哪些度量和维度条件)。

这可以在 SSAS/MDX 中完成吗?如果没有,是否有其他 Microsoft 工具/功能可以?系统的最低要求是 SQL Server 2008 R2 标准版。

老实说,我不知道从哪里开始。谷歌没有出现这样的结果(我看到了一些涉及单个度量的篮子分析内容,但我不确定是否或如何将其应用于我的场景)。无论如何,我都不是 SSAS/MDX/BI 专家。

我能想到两种选择:

  1. 使用DRILLTHROUGH单个 MDX 查询和(基本上)COUNT DISTINCT结果。
  2. 在数据仓库源数据库上使用 T-SQL。(可能难以有效地考虑所有情况。)

我们确实需要能够钻取,所以无论如何我可能都必须实施解决方案#1,但最好有一种更有效的方法来获取计数,因为需要频繁地进行计数.

4

4 回答 4

0

我会添加一个基于 Dimension1 Key 属性的 Distinct Count 度量。我会在 Excel 2010+ 中使用 Sets MDX 功能在 Measure1、2 等上进行过滤。

于 2013-03-10T23:00:22.470 回答
0

我从来没有为此找到 MDX 解决方案。

我继续使用直接查询数据仓库的解决方案,经过一些性能调整后,它运行良好。这种方法可能不适用于所有应用程序,但看起来它适用于我们的特定场景。

于 2013-03-21T20:11:53.280 回答
0

我会在 SQL Server 端(从两个表创建视图)或在 SSAS 端(创建单个度量但使用来自不同来源的不同分区(例如,Partition1 - 用于 Credits,Partition2 - 用于存款)推荐联合函数。

对于第二种方式,首先在这个“可怕的”决定上,您需要使用 SUM 函数进行简单的 Measure1。之后,点击 Measure1 并使用 DistionctCount 函数选择“创建新度量”。因此,SSAS 将使用 DistionctCount 函数与 Measure2 创建一个单独的新测量组。

它必须完美运行。

于 2018-11-19T08:00:43.743 回答
-1

让我们简化问题陈述。您需要同时购买面包和鸡蛋或拥有丰田和本田的顾客的数量。我很久以前就遇到过这个问题,并想出了一个查询设计。这些查询的性能并不好。由于这些查询的性质,他们正在将事实开放到粒度级别。因此,所有的聚合利益都失去了。

这是代码,我根据他们的名字来计算客户,他们订购了 ClassicVestS 或 HLMountainTire 和其他产品

with  
member [Measures].[CustomersWhoBoughtClassicVestS] as 
count(
intersect(
{nonempty(
existing ([Customer].[Customer].children),[Measures].[Internet Order Count]
)},
{extract(nonempty( ([Customer].[Customer].children* [Product].[Product].&[471]),[Measures].[Internet Order Count]),[Customer].[Customer])}
)
) 
member [Measures].[CustomersWhoBoughtHLMountainTire] as 
count(
intersect(
{nonempty(
existing ([Customer].[Customer].children),[Measures].[Internet Order Count]
)},
{extract(nonempty( ([Customer].[Customer].children* [Product].[Product].&[537]),[Measures].[Internet Order Count]),[Customer].[Customer])}
)
) 
Select {[Measures].[CustomersWhoBoughtClassicVestS],[Measures].[CustomersWhoBoughtHLMountainTire] 
} on columns , 
{ nonempty( [Product].[Product].children 
,[Measures].[Internet Order Count]) } 
on rows 
from [Adventure Works]

结果

于 2018-11-24T22:51:52.707 回答