reporting-services - SSRS mdx 报告 : use dimension on columns

标签 reporting-services mdx olap dimension rdl

这个简单的 mdx 查询在 SSMS 中可以工作:

SELECT  
CrossJoin({[Measures].[Qnt]},
          {[Sales_step].CHILDREN}) ON COLUMNS,
[City] ON ROWS  
FROM [SALES_PIPE]

但它无法在 Visual Studio 中运行 rdl 报告。出现错误:

The query cannot be prepared: The query must have at least one axis. 
The first axis of the query should not have multiple hierarchies, 
nor should it reference any dimension other than the Measures dimension..
Parameter name: mdx (MDXQueryGenerator)

我找到了另一种语法来检索结果,但它的列是硬编码的并且脚本很慢:

WITH 
MEMBER [Measures].[Contacts] AS 
       CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[contact]               
       THEN [Measures].[Qnt] ELSE null END
MEMBER [Measures].[Clients] AS 
       CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[client]               
       THEN [Measures].[Qnt] ELSE null END
MEMBER [Measures].[Funded] AS 
       CASE WHEN [Sales_step].CURRENTMEMBER IS [Sales_step].&[funded]               
       THEN [Measures].[Qnt] ELSE null END

SELECT {[Measures].[Contacts],
        [Measures].[Clients],
        [Measures].[Funded]} ON COLUMNS,

NON EMPTY     
FILTER(crossjoin({[City].CHILDREN},                            
                 {[Sales_step].CHILDREN}),
       [Measures].[Contacts] > 0 OR
       [Measures].[Clients] > 0 OR      
       [Measures].[Funded] > 0) ON ROWS 

FROM [SALES_PIPE]

这部分使它非常慢 - 不是计算成员,它是我必须制作的行上 City 和 Sales_step 维度的交叉联接(否则,仅在行上使用 City 变暗, - 我在列上得到空结果)。有什么建议可以让我的 mdx 更快吗?

最佳答案

这会产生相同的结果吗?是不是更快了?

WITH 
  MEMBER [Measures].[Contacts] AS 
    Sum
    (
      IIF
      (
        [Sales_step].CurrentMember IS [Sales_step].&[contact],
       ,[Measures].[Qnt]
       ,null
      )
    ) 
  MEMBER [Measures].[Clients] AS 
    Sum
    (
      IIF
      (
        [Sales_step].CurrentMember IS [Sales_step].&[client]
       ,[Measures].[Qnt]
       ,null
      )
    ) 
  MEMBER [Measures].[Funded] AS 
    Sum
    (
      IIF
      (
        [Sales_step].CurrentMember IS [Sales_step].&[funded]
       ,[Measures].[Qnt]
       ,null
      )
    ) 
  SET [yourMeasures] AS 
    {
      [Measures].[Contacts]
     ,[Measures].[Clients]
     ,[Measures].[Funded]
    } 
  SET [CitySales] AS 
    [City].Children * [Sales_step].Children 
  SET [CitySalesNonEmpty] AS 
    Union
    (
      NonEmpty([CitySales],[Measures].[Contacts])
     ,NonEmpty([CitySales],[Measures].[Clients])
     ,NonEmpty([CitySales],[Measures].[Funded])
    ) 
/*
//>>>>Alternative syntax for above union>>
  SET [CitySalesNonEmpty] AS 
      NonEmpty([CitySales],[Measures].[Contacts])
     +NonEmpty([CitySales],[Measures].[Clients])
     +NonEmpty([CitySales],[Measures].[Funded])
//>>>>
*/
SELECT 
  [yourMeasures] ON COLUMNS
 ,NON EMPTY 
    [CitySalesNonEmpty] ON ROWS
FROM [SALES_PIPE];

关于reporting-services - SSRS mdx 报告 : use dimension on columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975618/

相关文章:

powershell - SSRS 和 PowerShell : Create and set schedule for reports?

c# - 检索多维数据库对象目录

ssis - 为什么我们需要SSIS和数据仓库的星型模式?

sql-server - 在 rdlc 表达式中设置局部变量

reporting-services - RDLC tablix colspan 等价物

mysql - MDX 相当于 SQL 查询

sql-server - 使用 MDX 查询排序

ssas - 从SSAS中选择​​维度表

asp.net - 在网页中显示 OLAP SQL Server?

SSRS 中的文本换行