3

我有一个定义了组织结构层次结构的简单数据立方体。在多维数据集内的计算中,我希望根据MDX 查询的WHERE子句中当前使用的组织项目级别进行不同的计算。

因此,假设我有 5 个级别的组织结构,对于最后一个级别(商店级别),我想更改使用表达式进行计算的方式,例如:

IIF([Organization Structure].[Parent Id].LEVEL IS [Organization Structure].[Parent Id].[Level 05], 'THIS IS STORE', 'THIS IS NOT')

来自数据立方体的表达式

这在 Visual Studio 浏览器中会产生我们真正想要的东西: 浏览器的结果

和使用 MDX 查询一样:

SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123]
}

当我们想在WHERE子句中使用多个组织结构项时,问题就开始了。这个子句中只允许有来自同一级别的项目,我仍然想知道它是哪个级别,但是当然当我们将第二个项目添加到WHERE时,如下所示:

SELECT { [Measures].[TEST] } ON COLUMNS
FROM [DataCubeName]
WHERE
{
[Organization Structure].[Parent Id].&[123],
[Organization Structure].[Parent Id].&[124]
}

我收到“当前成员失败,因为属性的坐标包含一个集合”的错误。

这就是为什么在我的表达中我尝试在许多不同的配置中使用 ITEM(0) 函数,但我只是找不到在WHERE子句中当前使用的一组项目上使用它的方法......所以大问题是:

如何获取当前正在执行的 WHERE 子句中列出的一组项目,以便我可以在该集合上使用 Item(0),或者是否有任何其他方法可以检索当前选定项目的级别,知道它们必须是同一水平?

4

1 回答 1

0

在子句中使用Currentmember组合 with可能会出现问题。setwhere

请参阅 chris Webb 的这篇文章:http: //blog.crossjoin.co.uk/2009/08/08/sets-in-the-where-clause-and-autoexists/

对于您的情况,这是一种可能的解决方法:您可以尝试适应您的姜黄。

WITH 
  MEMBER [Measures].[x] AS 
    IIF
    (
       (existing [Geography].[Geography].[State-Province].members).item(0).Level
      IS 
       [Geography].[Geography].[State-Province]
     ,'THIS IS state'
     ,'THIS IS NOT'
    ) 
SELECT 
  {[Measures].[x]} ON COLUMNS
FROM [Adventure Works]
WHERE
(
{[Geography].[Geography].[State-Province].&[77]&[FR],
[Geography].[Geography].[State-Province].&[59]&[FR]}
);

扩展上述内容以证明它有效:

WITH 
  MEMBER [Measures].[x] AS 
    IIF
    (
        (EXISTING 
          [Geography].[Geography].[State-Province].MEMBERS).Item(0).Level
      IS 
        [Geography].[Geography].[State-Province]
     ,'THIS IS state'
     ,'THIS IS NOT'
    ) 
  MEMBER [Measures].[proof] AS 
    (EXISTING 
      [Geography].[Geography].[State-Province].MEMBERS).Item(0).Member_Caption 
  MEMBER [Measures].[proof2] AS 
    (EXISTING 
      [Geography].[Geography].[State-Province].MEMBERS).Count 
SELECT 
  {
    [Measures].[x]
   ,[Measures].[proof]
   ,[Measures].[proof2]
  } ON COLUMNS
FROM [Adventure Works]
WHERE 
  {
    [Geography].[Geography].[State-Province].&[77]&[FR]
   ,[Geography].[Geography].[State-Province].&[59]&[FR]
  };

结果如下:

在此处输入图像描述

所以你的表达可能会变成下面这样:

IIF
(
    (EXISTING 
      [Organization Structure].[Parent Id].MEMBERS).Item(0).Level
  IS 
    [Organization Structure].[Parent Id].[Level 05]
 ,'THIS IS STORE'
 ,'THIS IS NOT'
)
于 2015-05-27T10:42:50.573 回答