MDX问题,使用子查询对行进行计数

时间:2017-05-02 10:40:45

标签: subquery ssas mdx

我正在尝试使用子查询来计算行数(每个州的邮政编码)... 请帮我理解以下行为。 MDX:

WITH
SET [rows] AS
  {[Customer].[Postal Code].members} 
MEMBER [Measures].[RowsCount] AS
  Count
    (
      [rows]
    )
MEMBER [Measures].[RowsCount1] AS 
  Count
    (
      {[Customer].[Postal Code].members}
    )
SELECT
  {
    [Measures].[RowsCount]
    ,[Measures].[RowsCount1]
  } ON columns
FROM
  (
    SELECT
      (
        {[Customer].[State Province Name].&[Hamburg]}
      ) ON Columns
   FROM [Analysis Services Tutorial]
  )
  1. 为什么[Measures]。[RowsCount]和[Measures]。[RowsCount1]返回不同的结果,尽管两者都使用相同的集合:“{[Customer]。[Postal Code] .members}”)?
  2. 仅[Measures]。[RowsCount]返回正确/预期的结果,但我的目标是避免使用“WITH SET”定义,并仅使用[Measures]。[RowsCount1]内联,这应返回正确的结果
  3. 修改

    以下陈述将是一个解决方案:

    MEMBER [Measures].[RowsCount1] AS 
      Count
        (
          {[Customer].[Postal Code].members} * {[Customer].[State Province Name].&[Hamburg]}
        )
    

    但是我想通过使用CurrentMember函数实现它,就像这样(不起作用):

    MEMBER [Measures].[RowsCount1] AS 
      Count
        (
          {[Customer].[Postal Code].members} * {[Customer].[State Province Name].CurrentMember}
        )
    

2 个答案:

答案 0 :(得分:0)

SUBSELECT中的mdx与sql中的SUBQUERY不同 - 它不一定是子查询方式的完整过滤器 - 因此结果不同。

但是使用AdvWrks我很难复制你报告的行为。

我怀疑您可以将脚本修改为以下之一以获得所需的结果

 MEMBER [Measures].[RowsCount1] AS 
    Count
    (
        [DIM bla].[HIER bla].[Level]
      * 
        {[DIM bla2].[HIER bla2].&[test]}
    ) 

或者代替test使用全部成员:

  MEMBER [Measures].[RowsCount1] AS 
    Count
    (
        [DIM bla].[HIER bla].[Level]
      * 
        {[DIM bla2].[HIER bla2].[All]}
    ) 

答案 1 :(得分:0)

如果在where子句和子查询中添加切片,则上下文似乎不同:您可以通过slicer-or-sub-cube获取引用。但仍然不知道为什么[RowCount]和[RowCount1]返回diff值。

我在adv cube上做了一个测试,你在下面添加了列轴,遇到了类似的情况,希望对你有帮助。

WITH MEMBER [Measures].[count product of bikes] AS
count(EXTRACT( [Product].[Product].[Product]* [Product].
[Category].CurrentMember, [Product].[Product]))

SELECT  
{
[Measures].[count product of bikes] 
} on 0
,{
tail([Product].[Category].MEMBERs).item(0).item(0)
} on 1
from (SELECT{[Product].[Category].[Category].[Bikes]} ON 0  FROM [Adventure Works])

使用子查询,设置[Product]。[Category]。外部1轴上的.MEMBER返回两个成员[Product]。[Category]。[ALL]和[Product]。[Category]。[Bikes],并设置轴1到[Bike]的属性[Product]。[Category]的默认成员,然后计算出的成员[自行车的产品]将返回CurrentMember的预期值。