Включить пустые значения в запрос SSAS MDX для использования в SSRS - PullRequest
0 голосов
/ 09 мая 2011

У меня есть куб, полученный из трех таблиц измерений и таблицы фактов

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]

Службам отчетов, очевидно, нравится уплощенный запрос и показатель в столбце, например

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 голосов
/ 10 мая 2011

Используйте кнопку «Переключить непустую» в конструкторе запросов SSRS.

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

Похоже на набор данных с зеленой воронкой под ним.

Переключение между показом и не показом пустые ячейки в области данных. (Это эквивалент использования NON EMPTY пункт в MDX).

...