【问题标题】:How to write MDX Query for getting grouped results如何编写 MDX 查询以获取分组结果
【发布时间】:2015-12-09 23:03:13
【问题描述】:

我有 Cube,其中汇总了数据,我只需要根据每个 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]})

但抛出错误:

“分布区域层次结构已经出现在 Axis1 轴”

我通过以下方式重新构建和制定了以下子选择查询:

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

但它也返回了“歧义错误”。

所有我需要的输出方式如下

编辑

在德国的所有寄售

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

【问题讨论】:

  • 为什么不使用预定义的度量Num. Consignments
  • 不不,那是数字。针对特定客户的寄售(此处为 [寄售.目标地址。目标地址],并且在特定邮政编码区域有 100 位客户(或目标地址)。所以,我想要的所有货物都没有针对特定邮政编码的寄售,例如 38-> 150、54-->300等(在38个邮编中,有多个对应的客户和其他汇总/汇总数据)
  • 查看我的编辑...这将有助于了解我需要什么。

标签: sql-server mdx olap saas


【解决方案1】:

我刚刚为所有邮政编码应用了过滤器,并使用“过滤器表达式”将“范围”作为运算符引入,它起作用了!!

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

【讨论】:

  • 您的解决方案与您在问题中指定的内容相矛盾。为什么所有国家都包括在这里?
  • 对不起,这个 CountryId 将由代码提供(例如 CountryId = 94)
【解决方案2】:

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

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 的一组目标地址,其中 寄售数量 不为空(即 0)

【讨论】:

  • 它正在返回输出,但对应于每个邮政编码,它有一个条目“#Error”,错误描述是:“CURRENTMEMBER 函数需要第一个参数的层次结构表达式。使用了成员表达式。 "
  • 糟糕!已更正。立即尝试。
  • 不,尝试修改后它给了我同样的错误,但我对我的答案应用了查询,它给了我正确的结果。
  • 之前我错误地应用了CURRENTMEMBER 函数。它已得到纠正。我很惊讶它仍然抛出了同样的错误。但很高兴您找到了解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2015-10-24
  • 2014-02-04
  • 2021-07-01
  • 2020-02-03
相关资源
最近更新 更多