Ssas 仅对现有事实聚合MDX查询结果

Ssas 仅对现有事实聚合MDX查询结果,ssas,mdx,olap,cube,Ssas,Mdx,Olap,Cube,我对MDX非常陌生,所以我可能遗漏了一些非常简单的东西 在我的多维数据集中,我有一个维度[Asset]和一个度量值[visions],计算(在本例中)一个资产已被使用的访问次数。需要注意的一点是,并非每次访问都与资产相关 我需要了解的是,有多少访问至少消耗了一项资产。我编写了以下查询: SELECT [Asset].[All] ON COLUMNS, [Measures].[Visits] ON ROWS FROM [Analytics] 但是这个查询只返回多维数据集中的访问总数。

我对MDX非常陌生,所以我可能遗漏了一些非常简单的东西

在我的多维数据集中,我有一个维度
[Asset]
和一个度量值
[visions]
,计算(在本例中)一个资产已被使用的访问次数。需要注意的一点是,并非每次访问都与资产相关

我需要了解的是,有多少访问至少消耗了一项资产。我编写了以下查询:

SELECT
  [Asset].[All] ON COLUMNS,
  [Measures].[Visits] ON ROWS
FROM
  [Analytics]

但是这个查询只返回多维数据集中的访问总数。我尝试将
非空
修饰符应用于两个轴,但没有任何帮助。

此查询应提供您期望的结果:

WITH MEMBER [Asset].[Asset Name].[All Assets] AS
  AGGREGATE( EXCEPT( [Asset].[Asset Name].MEMBERS, { [Asset].[All] } ) )
SELECT
  { [Asset].[Asset Name].[All Assets] } ON COLUMNS,
  [Measures].[Visits] ON ROWS
FROM
  [Analytics]
您可能需要将
{[Asset].[Asset Name].[All]}
作为的第二个参数,除非未排除All成员

在查询中,我创建了一个计算成员
[Asset].[Asset Name].[all assets]
,该成员应表示所有现有资产。我假设您现有的资产都是
[Asset].[Asset Name]
级别的成员,但是
所有成员都是
级别的成员

您可以找到有关聚合函数的更多信息。

这也适用于:

SELECT
  [Measures].[Visits] ON 0
FROM
  [Analytics]
WHERE
  DRILLDOWNLEVEL([Asset].[All])
更新:以及以下内容:

SELECT
  [Measures].[Visits] ON 0
FROM
  [Analytics]
WHERE
  [Asset].[All].CHILDREN

您的
资产
层次结构的级别是什么?@Benoit只有一个级别-
资产名称
此查询是否返回与资产无关的访问<代码>选择[Asset].[Asset Name]。列上的成员,[Analytics].[Measures].[Visits]行上的成员从[Analytics]
@Benoit返回整个
[Asset]
成员集,包括
所有
。当然,对于每个特定资产,访问次数是正确的。但是
All
仍然显示多维数据集中的访问总数。顺便说一句,我不能只计算每个资产的所有访问值之和,因为这是一种多对多关系,意味着一次访问可以消耗多个资产。这似乎几乎可行。它给了我
114370
,而正确的金额应该是
116092
。“你能解释一下你的疑问是如何运作的吗?”谢达尔我在回答中补充了一些解释。我理解你的逻辑,对我来说似乎是正确的。但是,由于某些原因,它并没有像预期的那样工作。也许是因为这是一种多对多的关系,也许是因为其他原因。。。但是,如果我们从另一个角度来处理它,会怎么样?为什么“All”成员包含所有数据?也许某个地方有一个设置,改变了它的行为?似乎在我的多维数据集中错误的数字是一个错误,而不是在你的查询中。感谢您的帮助,将答案标记为已接受。