Mdx 如何通过标志值过滤具有多个交叉连接的查询中的数据

Mdx 如何通过标志值过滤具有多个交叉连接的查询中的数据,mdx,cognos,Mdx,Cognos,我有一个对行和列具有多个交叉连接的查询,我要筛选所有数据[Measures].[Flag]=1 以下是一个例子: SELECT { NonEmpty ( CrossJoin ( { [Time].[2016] ,[Time].[2017] } ,CrossJoin ( { [Quarters].[2 Quar

我有一个对行和列具有多个交叉连接的查询,我要筛选所有数据[Measures].[Flag]=1 以下是一个例子:

SELECT 
  {
    NonEmpty
    (
      CrossJoin
      (
        {
          [Time].[2016]
         ,[Time].[2017]
        }
       ,CrossJoin
        (
          {
            [Quarters].[2 Quarter]
           ,[Quarters].[1 Quarter]
          }
         ,{
            [Measures].[Load]
           ,[Measures].[Flag]
          }
        )
      )
    )
  } ON ROWS
 ,{CrossJoin([Industry].[Industry 1],[Client].[Set 1])} ON COLUMNS
FROM [Cube]
WHERE 
  [Version].[Actual];
如果我这样做:

SELECT 
  {
    NonEmpty
    (
      CrossJoin
      (
        {
          [Time].[2016]
         ,[Time].[2017]
        }
       ,CrossJoin
        (
          {
            [Quarters].[2 Quarter]
           ,[Quarters].[1 Quarter]
          }
         ,{
            [Measures].[Load]
           ,[Measures].[Flag]
          }
        )
      )
    )
  } ON ROWS
 ,{
    Filter
    (
      CrossJoin
      (
        [Industry].[Industry 1]
       ,[CLient].[Set 1]
      )
     ,
      [Measures].[Flag] = 1
    )
  } ON COLUMNS
FROM [Cube]
WHERE 
  [Version].[Actual];

我有一套空的。在没有筛选器的结果集中,如果您只是将其移动到HAVING子句中,则会有Flag=1的数据,这有帮助吗

SELECT 
  {
    NonEmpty
    (
      CrossJoin
      (
        {
          [Time].[2016]
         ,[Time].[2017]
        }
       ,CrossJoin
        (
          {
            [Quarters].[2 Quarter]
           ,[Quarters].[1 Quarter]
          }
         ,{
            [Measures].[Load]
           ,[Measures].[Flag]
          }
        )
      )
    )
  } ON ROWS
 ,
      CrossJoin
      (
        [Industry].[Industry 1]
       ,[CLient].[Set 1]
      )
     having [Measures].[Flag] = 1 ON COLUMNS
FROM [Cube]
WHERE 
  [Version].[Actual];

嗨,我找到了解决这个问题的办法。解决方法是使用不同的过滤器。以下是一个例子:

SELECT 
  {
    NonEmpty
    (
      CrossJoin
      (
        {
          [Time].[2016]
         ,[Time].[2017]
        }
       ,CrossJoin
        (
          {
            [Quarters].[2 Quarter]
           ,[Quarters].[1 Quarter]
          }
         ,{
            [Measures].[Load]
           ,[Measures].[Flag]
          }
        )
      )
    )
  } ON ROWS
 ,{CrossJoin([Industry].[Industry 1],[Client].[Set 1])} ON COLUMNS
FROM [Cube]
WHERE 
  [Version].[Actual];
这里需要注意的一点是,“标志”数据在特定维度配置中可用

SELECT 
  {
    NonEmpty
    (
      CrossJoin
      (
        {
          [Time].[2016]
         ,[Time].[2017]
        }
       ,CrossJoin
        (
          {
            [Quarters].[2 Quarter]
           ,[Quarters].[1 Quarter]
          }
         ,{
            [Measures].[Load]
           ,[Measures].[Flag]
          }
        )
      )
    )
  } ON ROWS
 ,{
    Filter
    (
      CrossJoin
      (
        [Industry].[Industry 1]
       ,[CLient].[Set 1]
      )
     ,
      (
       [Cube].(
               [Time].[2016],
               [Quarters].[1 Quarter],
               [Measures].[Flag]
              ) = 1
      )
    )
  } ON COLUMNS
FROM [Cube]
WHERE 
  [Version].[Actual];

我认为过滤器将对每列进行[Measures].[Flag]的求和-如果求和为1,则保持该列。。。但我怀疑每个[Measures].[Flag]列都超过1。我已经测试过了。Having在Cognos TM1上给了我语法错误。@Mindaugas我在Cognos中使用Having时发现了这个问题:我找到了一个解决方案。我不得不以不同的方式使用过滤器。