在SSAS MDX查询中包含空值以在SSRS中使用

时间:2011-05-09 04:08:50

标签: reporting-services mdx ssas

我有一个从三维表和事实表派生的多维数据集

fact_event(日期,地点,类型) dim_location,dim_type和dim_time

我想使用报告服务来创建具有以下布局的报告

SELECT 
    [Location].Members ON COLUMNS,
    [Type].Members ON ROWS,
    [Time].[Hierarchy].[Month] ON PAGES
  FROM [Events]
  WHERE
    [Measures].[Event Count]

Reporting Services显然更喜欢平展的查询和列中的度量,例如

SELECT
    [Measures].[Event Count] ON COLUMNS
    {
      [Location].Members *
      [Type].Members *
      [Time].[Hierarchy].[Month]
    } ON ROWS
  FROM [Events]

但是当执行它时,行和列不包含值将被删除。 所以一月份我可能会有“纽约”,“伦敦”,“悉尼” 但对于二月我只有“纽约”,“悉尼”

我想要一个MDX查询,在那个月为伦敦返回0。

事件类型也是如此,因为特定月份可能不会发生某些事件类型,但我希望在该月出现一行零。

我可以通过恢复到sql来获取所需的数据,但使用多维数据集会更加可取。获取我想要的一切的SQL查询是

SELECT d.[Month], t.[Type], l.[Location], COALESCE(es.EVENT_COUNT, 0) AS EVENT_COUNT
  FROM 
  (
    SELECT DISTINCT [Month]
      FROM @Dim_Time 
  ) d
  CROSS JOIN @Dim_Type t
  CROSS JOIN @Dim_Location l
  LEFT JOIN
  (
    SELECT [Month], [Type], [Location], 
        COUNT(*) AS EVENT_COUNT
      FROM @Fact_Event
      GROUP BY [Month], [Type], [Location]
  ) es ON (d.[Month] = es.[Month] AND t.[Type] = es.[Type] AND 
           l.[Location] = es.[Location])

我已经包含了一个脚本,用一些临时表填充适当的数据来演示上面的查询

declare @Dim_Time table ([Month] datetime)
declare @Dim_Location table ([Location] varchar(10))
declare @Dim_Type table ([Type] varchar(10))
declare @Fact_Event table ([Month] datetime, [Location] varchar(10), [Type] varchar(10))

insert into @Dim_Time values ('1 Jan 2011')
insert into @Dim_Time values ('1 Feb 2011')
insert into @Dim_Location values ('New York')
insert into @Dim_Location values ('Sydney')
insert into @Dim_Location values ('London')
insert into @Dim_Type values ('Good')
insert into @Dim_Type values ('Bad')

insert into @Fact_Event values ('1 Jan 2011', 'New York', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'New York', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'New York', 'Bad')
insert into @Fact_Event values ('1 Jan 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'Sydney', 'Bad')
insert into @Fact_Event values ('1 Jan 2011', 'London', 'Good')
insert into @Fact_Event values ('1 Jan 2011', 'London', 'Bad')
insert into @Fact_Event values ('1 Jan 2011', 'London', 'Bad')
insert into @Fact_Event values ('1 Feb 2011', 'New York', 'Bad')
insert into @Fact_Event values ('1 Feb 2011', 'New York', 'Bad')
insert into @Fact_Event values ('1 Feb 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Feb 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Feb 2011', 'Sydney', 'Good')
insert into @Fact_Event values ('1 Feb 2011', 'Sydney', 'Bad')
insert into @Fact_Event values ('1 Feb 2011', 'Sydney', 'Good')

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用SSRS查询设计器中的“切换非空”按钮。

http://64.4.11.252/en-us/library/ms403829(SQL.110).aspx

看起来像是一个带有绿色漏斗的数据集。

  

在显示和不显示之间切换   数据窗格中的空单元格。 (这是   相当于使用NON EMPTY   MDX中的条款)。