1

我最近使用 excel 连接到分析服务并生成用于查询多维数据集的 mdx 代码。代码如下所示。该代码还使用 sql profiler 进行了验证。但是,当我去分析服务并浏览多维数据集并将多维数据集放入管理工作室时,我得到了错误。请让我知道代码是否可以修复。这段代码正是我需要的,所以如果有任何修改,请在多维数据集本身内替换它。

代码

SELECT NON EMPTY Hierarchize(DrilldownMember(CrossJoin({ 
[ColorsDim].[PrimeColor].[All], [ColorsDim].[PrimeColor].[PrimeColor].AllMember}, 
{([ColorsDim].[SecondColor].[All]) }), [ColorsDim].[PrimeColor].[PrimeColor].AllMember, 
[ColorsDim].[SecondColor])) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
            ,HIERARCHY_UNIQUE_NAME ON COLUMNS
            ,NON EMPTY Hierarchize({DrilldownMember({ 
[ColorsDim].[Color_id].[All] },,, INCLUDE_CALC_MEMBERS) }) DIMENSION PROPERTIES 
PARENT_UNIQUE_NAME
                    ,HIERARCHY_UNIQUE_NAME ON ROWS FROM [Model]
                WHERE ([Measures].[Number of records in ColorDim]) CELL PROPERTIES VALUE
                    ,FORMAT_STRING
                    ,BACK_COLOR
                    ,FORE_COLOR
                    ,FONT_FLAGS

错误

Query Preparation failed. 

Additional information
The query cannot be prepared: The query must have at least one axis. The first axis of the query should not have mulitple hierarchies, nor should it reference any dimension other than the measures dimension..
Parameter name: mdx (MDXQueryGenerator)

期望的输出 在此处输入图像描述

以下查询显示了所需的输出:

Select non empty
[ColorsDim].[PrimeColor].children *
[ColorsDim].[SecondColor].children
on 0
, non empty
[ColorsDim].[Color_id].children
on 1
from [model]
where [Measures].[Number of records in ColorDim];

查询中的度量是该特定维度的行数

4

1 回答 1

1

好吧,您提供的错误消息在我看来就像 SSRS 错误消息。

如果您打开 SSMS 并连接到多维数据集,然后打开 mdx 查询,则查询应该可以正常运行。

重新格式化查询,以便我们可以更清楚地看到正在发生的事情给出了以下结果:

SELECT 
  NON EMPTY 
    Hierarchize(
      DrilldownMember(
        CrossJoin(
          {[ColorsDim].[PrimeColor].[All]
         , [ColorsDim].[PrimeColor].[PrimeColor].AllMember}
         ,{([ColorsDim].[SecondColor].[All]) }
        )
      , [ColorsDim].[PrimeColor].[PrimeColor].AllMember
      , [ColorsDim].[SecondColor]
      )
    ) DIMENSION PROPERTIES PARENT_UNIQUE_NAME
      ,HIERARCHY_UNIQUE_NAME ON COLUMNS
 ,NON EMPTY 
    Hierarchize(
       {
         DrilldownMember(
           {[ColorsDim].[Color_id].[All] }
            ,,, INCLUDE_CALC_MEMBERS
         ) 
        }
     ) 
    DIMENSION PROPERTIES PARENT_UNIQUE_NAME
   ,HIERARCHY_UNIQUE_NAME ON ROWS 
FROM [Model]
WHERE ([Measures].[Number of records in ColorDim]) 
CELL PROPERTIES VALUE
                    ,FORMAT_STRING
                    ,BACK_COLOR
                    ,FORE_COLOR
                    ,FONT_FLAGS

Excel 添加了很多样板代码,因此我们可以摆脱单元格和维度属性,我怀疑不需要层次化,并且可以用简单的*运算符替换交叉连接,给出这个:

SELECT 
  NON EMPTY 
      DrilldownMember(
           [ColorsDim].[PrimeColor].[All]
         * [ColorsDim].[PrimeColor].[PrimeColor].AllMember
         ,{([ColorsDim].[SecondColor].[All])}
        )
      , [ColorsDim].[PrimeColor].[PrimeColor].AllMember
      , [ColorsDim].[SecondColor]
      )
     ON 0
 ,NON EMPTY 
     DrilldownMember(
       {[ColorsDim].[Color_id].[All] }
        ,,, INCLUDE_CALC_MEMBERS
     ) 
    ON 1
FROM [Model]
WHERE [Measures].[Number of records in ColorDim]; 

如果您想在 SSRS 中使用它,那么您需要重新编写它,以便 COLUMNS(或 0)仅使用维度度量!

为了让 ssrs 足够开心,你可以这样做:

WITH 
MEMBER [Measures].[Green_YellowGreen] AS
  (
   [ColorsDim].[PrimeColor].[PrimeColor].[Green],
   [ColorsDim].[PrimeColor].[SecondColor].[Yellow-Green],
   [Measures].[Number of records in ColorDim]
  )
MEMBER [Measures].[Green_BlueGreen] AS
  (
   [ColorsDim].[PrimeColor].[PrimeColor].[Green],
   [ColorsDim].[PrimeColor].[SecondColor].[Blue-Green],
   [Measures].[Number of records in ColorDim]
  )
SELECT 
 NON EMPTY
 {[Measures].[Green_YellowGreen], [Measures].[Green_BlueGreen] }
ON 0
, NON EMPTY
  [ColorsDim].[Color_id].children
ON 1
FROM [model];
于 2017-04-06T20:20:32.077 回答