2017-04-06 168 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