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

Reporting services 在SSAS MDX查询中包含空值以在SSRS中使用,reporting-services,mdx,ssas,Reporting Services,Mdx,Ssas,我有一个从三维表和事实表派生的立方体 事件日期、地点、类型 调光位置、调光类型和调光时间 我想使用reporting services创建具有以下布局的报告 SELECT [Location].Members ON COLUMNS, [Type].Members ON ROWS, [Time].[Hierarchy].[Month] ON PAGES FROM [Events] WHERE [Measures].[Event Count] Report

我有一个从三维表和事实表派生的立方体

事件日期、地点、类型 调光位置、调光类型和调光时间

我想使用reporting services创建具有以下布局的报告

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

感谢您的帮助。

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

看起来像一个下面有绿色漏斗的数据集

在显示和不显示之间切换 数据窗格中的空单元格。这是 等效于使用非空 MDX中的子句


谢谢你,梅夫。你的答案就是我所问问题的答案。通常,为了简化问题,我排除了问题的根源。为什么它在你的情况下有效,而不是在我的情况下,让我找到了解决办法。问题的一个关键部分应该是,我正在按事实维度的属性进行切片。一旦我把它们提升到完全成熟的维度,它就如你所描述的那样工作了