如何编写 MDX 查询以获取分组结果

How to write MDX Query for getting grouped results

我有数据聚合的多维数据集,我只需要根据每个 2 位邮政编码计算记录数。

附图显示了我的多维数据集层次结构和度量。

我应用了如下查询:

WITH MEMBER [Measures].NoOfConsignments as Count(([Consignment].[Target Address Name].[Target Address Name]))
select filter([Consignment].[Distribution Area].[Zip2], [Consignment].[Distribution Area].[Target Address Country] = "94") on rows,
{[Measures].NoOfConsignments} on columns
from [RebellOlap]
where ({[Consignment].[Distribution Area].[Target Address Country].&[94]})

但抛出错误:

"The Distribution Area hierarchy already appears in the Axis1 axis"

我按照以下方式重新构造和制定了以下子select查询:

WITH MEMBER [Measures].NoOfConsignments as Count(([Consignment].[Target Address Name].[Target Address Name]))
Select
NON EMPTY [Measures].NoOfConsignments on columns,
NON EMPTY [Consignment].[Distribution Area].[Zip2] on rows
FROM  ( 
    SELECT {[Consignment].[Distribution Area].[Zip2],[Consignment].[Distribution Area].[Target Address Country].&[94]}
    FROM [RebellOlap] 
   )

但它也返回了 'ambiguity error'。

我需要的按以下方式输出

编辑

德国的所有货物

所有在德国的特定邮政编码的货物

根据您的修改,我认为以下内容应该适合您:

WITH MEMBER Measures.NumConsignment as
COUNT
     (
      NonEmpty
             (
              [Consignment].[Target Address Name].[Target Address Name].MEMBERS, 
              ([Consignment].[Distribution Area].CURRENTMEMBER, Measures.[Num. Consignments])
             )
     )

SELECT [Consignment].[Distribution Area].[Zip2].MEMBERS on 1,
Measures.NumConsignment ON 0
FROM 
(
 SELECT [Consignment].[Distribution Area].[Target Address Country].&[94] ON 0
 FROM [RebellOlap]
)

虽然其余代码非常标准,但有一部分可能需要解释。

      NonEmpty
             (
              [Consignment].[Target Address Name].[Target Address Name].MEMBERS, 
              ([Consignment].[Distribution Area].CURRENTMEMBER, Measures.[Num. Consignments])
             )

这将返回当前 zip 的一组目标地址,其中 num of consignments 不为空(即 < >0)

我刚刚对所有邮政编码应用了过滤器,并将 "Range" 作为运算符与 'Filter Expression' 一起引入,并且成功了!

SELECT NON EMPTY { [Measures].[ConsignmentCount] } ON COLUMNS, 
NON EMPTY { ([Consignment].[Distribution Area].[Zip2].ALLMEMBERS ) } ON ROWS 
FROM ( SELECT ( [Consignment].[Distribution Area].[Zip2].&[94]&[0]&[01] : [Consignment].[Distribution Area].[Zip2].&[94]&[9]&[99] ) ON COLUMNS 
FROM [RebellOlap])