Olap 立方体和 MDX 和 NON EMPTY

Posted

技术标签:

【中文标题】Olap 立方体和 MDX 和 NON EMPTY【英文标题】:Olap cube and MDX and NON EMPTY 【发布时间】:2012-05-11 15:01:55 【问题描述】:

我对 SSAS、OLAP 和 MDX 语法非常陌生。

所以我有这个MDX 来通过TSQL(通过链接服务器到 SSAS)查询多维数据集,它工作正常:

select * from openquery(GCUBE, 
'SELECT NON EMPTY  [Measures].[Valore]  ON COLUMNS, 
NON EMPTY 
( [Prodotti].[Top Marca].[Top Marca].ALLMEMBERS 
* [Prodotti].[Top Codice].[Top Codice].ALLMEMBERS 
* [Agenti].[Vw Agenti].[Vw Agenti].ALLMEMBERS
* [Calendario].[AnnoMese].[Mese].ALLMEMBERS 
* [Prodotti].[Ordinamento].[Ordinamento].ALLMEMBERS 
* [Prodotti].[Top].[Top].ALLMEMBERS )

DIMENSION PROPERTIES MEMBER_CAPTION
ON ROWS FROM ( SELECT (  [Calendario].[Anno].&[2012]  )
ON COLUMNS FROM ( SELECT (  [Agenti].[Vw Agenti].&[005]  )
ON COLUMNS FROM [Vendite])) WHERE (  [Calendario].[Anno].&[2012] )'
)

嗯,[Prodotti].[Top Marca] 是基于包含 50 个最畅销品牌的表格的维度,此 MDX 由特定 ID 代理 [Vw Agenti] = 005 过滤。

查询的目的是了解代理商如何销售公司的 50 个畅销品牌。

查询正常,但有一个品牌不是该代理商销售的,我需要显示空行。

下图显示了相对于位置(排名)31的缺失记录

我了解NON EMPTY 的概念,但我找不到正确的语法来显示空记录。

我应该如何修改 MDX?

我试图删除NON EMPTY,但我收到一个一般错误:

Cannot execute the query against OLE DB provider "MSOLAP" for linked server "GCUBE"

是否需要更改多维数据集中的维度Top Marca

提前感谢任何可以帮助我或提供解决此问题的正确提示的人。

【问题讨论】:

删除 NON EMPTY 时出现什么错误? @Marc,我添加了有关该错误的更多信息,但如您所见,这是一个通用错误 你为什么要在列和行上都使用 Agenti? 【参考方案1】:

我不是 SSAS/TSQL 专家,但我会先尝试一个简单的请求:

SELECT 

[Measures].[Valore]ON COLUMNS, 

NON EMPTY [Prodotti].[Top Marca].[Top Marca].ALLMEMBERS ON ROWS 

FROM ( SELECT  [Calendario].[Anno].&[2012]  ON COLUMNS 
  FROM ( SELECT  [Agenti].[Vw Agenti].&[005]  ON COLUMNS 
    FROM [Vendite] 
  )
) '

没有这个 TSQL 的东西有什么方法可以运行它?

【讨论】:

+1 开始简单。这几乎总是弄清复杂 MDX 查询的最佳方式。得到一些基本的工作,然后再增加复杂性。当您添加到查询中时,您将一次发现 1 个令人费解的问题,而不是有 50 个可能导致问题的不同候选人。

以上是关于Olap 立方体和 MDX 和 NON EMPTY的主要内容,如果未能解决你的问题,请参考以下文章

在 MDX 查询中组合关系数据和 OLAP 数据

如何评估 MDX 在 OLAP 处理中的性能

添加 where 条件使 MDX 查询变慢(olap4j)

OLAP SSAS MDX 如何获取先前选定/可见日期的度量值

MDX SSAS OLAP -- 根据维度选择切换属性

是否有(开源)基于 MDX 的内存中 OLAP 服务器? [关闭]