2017-04-06 169 views
1

我最近使用excel连接到分析服务并生成了用于查询多维数据集的mdx代码。代码如下所示。该代码还使用sql profiler进行了验证。但是,当我去分析服务并浏览多维数据集并将其放入管理工作室的多维数据集中时,出现错误。请让我知道,如果代码可以修复。这段代码正是我所需要的,因此如果有任何修改,请在多维数据集本身中进行替换。使用从数据透视表生成的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 

错误

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) 

所需的输出 enter image description here

下面的查询给出了期望的输出:

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]; 

查询中的措施是针对特定维度

+0

你能澄清吗?你在SSMS中使用MDX窗口吗?你在使用Reporting Services吗?你是在SSMS中打开一个对立方体的查询窗口,然后编辑MDX?尝试一个MDX窗口。 – GregGalloway

+0

您的mdx工作正常。但是,当你浏览多维数据集并在其中输入相同的代码时,相同的mdx不起作用。 – Mutai

+0

啊。多维数据集浏览器本质上是Reporting Services MDX查询设计器。它只支持列上的措施。所以我会坚持使用MDX查询窗口而不是多维数据集浏览器。 @whytheq是绝对正确的。 – GregGalloway

回答

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中添加了大量的样板代码,这样我们就可以摆脱电池和维度属性的,我怀疑hierarchize不需要和交叉连接可以用简单的*操作者更换,给这样的:如果你想使用这个在SSRS,那么你将需要重新写

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]; 

使列(或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]; 
+0

你可以举一个如何重写它的例子,所以我可以在ssrs – Mutai

+0

@Mutai中使用它,所以你想在SSRS中使用它?正如我所说的,你只能在'ON COLUMNS'子句中使用'[Measures]。[...]'。您需要提供输出的想法(屏幕打印),供我们重新编写。 – whytheq

+0

我已经提供了所需的输出以及我用于在mdx中获取输出的查询。只是不确定如何将其应用于ssrs。欣赏一个清除混淆的例子。 – Mutai