У меня есть куб, полученный из трех таблиц измерений и таблицы фактов
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')
Любая помощь приветствуется.