【问题标题】:MDX issue, rows count using a subqueryMDX 问题,使用子查询计算行数
【发布时间】:2017-05-02 10:40:44
【问题描述】:

我正在尝试使用子查询来计算行数(每个州的邮政编码)... 请帮助我理解以下行为。 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] 内联,它应该返回正确的结果.

编辑

以下语句将是一个解决方案:

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

【问题讨论】:

    标签: subquery ssas mdx


    【解决方案1】:

    mdx 中的 SUBSELECT 与 sql 中的 SUBQUERY 不同 - 它并不总是像子查询那样是一个完整的过滤器 - 因此结果会有所不同。

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

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

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

    或者使用 All 成员而不是 test

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

    【讨论】:

      【解决方案2】:

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

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

      使用子查询,在外 1 轴上设置 [Product].[Category].MEMBERs 返回两个成员 [Product].[Category].[ALL] 和 [Product].[Category].[Bikes],并设置轴 1 上属性 [Product].[Category] ​​的默认成员到 [Bike],则计算出的成员 [ount product of bikes] 将返回带有 CurrentMember 的预期值。

      【讨论】:

      • 感谢您的回答,但措施[Measures].[RowsCount1] 是错误的:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      相关资源
      最近更新 更多