2017-07-07 94 views
2

由於在MDX中,您可以指定成員[all]在維度的所有成員之間添加聚合,如果我想顯示某個度量的總數I可以建立類似MDX:定義維度子集並顯示總數

SELECT { 
    [MyGroup].[MyDimension].[MyDimension].members, 
    [MyGroup].[MyDimension].[all] 
    } * 
    [Measures].[Quantity] on 0 
FROM [MyDatabase] 

現在我想過濾MyDimension了一堆值的查詢,並顯示總選定值的,當然,如果我生成查詢

SELECT { 
    [MyGroup].[MyDimension].[MyDimension].&[MyValue1], 
    [MyGroup].[MyDimension].[MyDimension].&[MyValue2], 
    [MyGroup].[MyDimension].[all] 
    } * 
    [Measures].[Quantity] on 0 
FROM [MyDatabase] 

它顯示MyValue1,MyValue2的數量和所有MyDimension成員的總數,而不僅僅是我選擇的

我調查了一下,走過來,其中包括一個子查詢產生的解決方案來篩選自己的價值觀

SELECT { 
    [MyGroup].[MyDimension].[MyDimension].members, [MyGroup].[MyDimension].[all] 
    } * [Measures].[Quantity] ON 0 
FROM (
    SELECT { 
     [MyGroup].[MyDimension].[MyDimension].&[MyValue1], 
     [MyGroup].[MyDimension].[MyDimension].&[MyValue2] 
     } ON 0 
    FROM [MyDatabase] 
) 

假設這個作品,有沒有simplier或更直接的方法來實現這一目標

我試圖使用SET聲明來定義我的自定義元組集,但然後我無法設法顯示總數。請記住,在我的示例中,我儘可能地簡化了事情,但在實際情況下,我可以在行和列上都有多個維度,並使用會員聲明定義了多個計算度量值。

謝謝!

回答

2

你所做的是標準 - 它簡單的方法!

使用子選擇時要注意的一點是,它不是一個完整的過濾器,原始的All仍然可用。我認爲這是與mdx條款的查詢處理連接 - 這裏是我的意思的例子:

WITH 
    MEMBER [Product].[Product Categories].[All].[All of the Products] AS 
    [Product].[Product Categories].[All] 
SELECT 
    [Measures].[Internet Sales Amount] ON 0 
,NON EMPTY 
    { 
     [Product].[Product Categories].[All]      //X 
    ,[Product].[Product Categories].[All].[All of the Products] //Y 
    ,[Product].[Product Categories].[Category].MEMBERS 
    } ON 1 
FROM 
(
    SELECT 
    { 
     [Product].[Product Categories].[Category].&[4] 
    ,[Product].[Product Categories].[Category].&[1] 
    } ON 0 
    FROM [Adventure Works] 
); 

所以行標X將是類別4和1,但線Y將窗臺的總和指整個冒險作品:在使用所有成員子句時

enter image description here

這種行爲雖然有點混亂有用。