【问题标题】:Aggregating MDX query results on existing facts only仅聚合现有事实的 MDX 查询结果
【发布时间】:2012-08-15 13:17:17
【问题描述】:

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

在我的多维数据集中,我有一个维度 [Asset] 和一个度量 [Visits],计算(在这种情况下)资产已被消耗了多少次访问。需要注意的重要一点是,并非每次访问都与资产相关联。

我需要知道有多少访问至少消耗了一项资产。我写了以下查询:

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

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

【问题讨论】:

  • Asset 层次结构的级别是什么?
  • @Benoit 只有一层——Asset Name
  • 此查询是否返回与资产无关的访问? SELECT [Asset].[Asset Name].Members ON COLUMNS, [Measures].[Visits] ON ROWS FROM [Analytics]
  • @Benoit 好吧,它返回整个[Asset] 成员集,包括All。当然,对于每个特定资产,访问次数是正确的。但是All 仍然显示立方体中的总访问次数。顺便说一句,我不能只计算每个资产的所有访问值的总和,因为它是多对多关系,这意味着一次访问可以消耗多个资产。

标签: ssas mdx olap cube


【解决方案1】:

这个查询应该给你你所期望的:

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]

如果未排除 All 成员,您可能需要将 {[Asset].[Asset Name].[All]} 作为“除外”的第二个参数。

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

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

【讨论】:

  • 这似乎几乎工作。它给了我114370,而正确的数量应该是116092。您能解释一下您的查询是如何工作的吗?
  • @Shedal 我在回答中添加了解释。
  • 我理解你的逻辑,这对我来说似乎是有效的。但是,由于某种原因,它仍然无法按预期工作。可能是因为它是多对多关系,也可能是其他原因……但是如果我们从不同的角度处理它会怎样——为什么“All”成员包含所有数据?也许某处有一个设置,改变了它的行为?
  • 似乎错误的数字是我的多维数据集中的错误,而不是您的查询。感谢您的帮助,将答案标记为已接受。
【解决方案2】:

这也有效:

SELECT
  [Measures].[Visits] ON 0
FROM
  [Analytics]
WHERE
  DRILLDOWNLEVEL([Asset].[All])

更新:以及这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多