Как группировать и фильтровать по одному и тому же измерению в MDX
Вопрос
Я хочу создать гистограмму с полосой для каждого месяца и некоторой мерой.
Но я также хочу отфильтровать диапазон дней, который может не полностью перекрывать часть месяца.
Когда это произойдет, я бы хотел, чтобы совокупный подсчет за этот месяц суммировался только за те дни, которые попадают в мой диапазон дат, а не за весь месяц.
Возможно ли это с помощью MDX, и если да, то как должен выглядеть запрос?
Решение
Создайте второе измерение времени, используя виртуальное измерение исходного измерения.Используйте одно измерение в то, где и другое в выборе.
Это часто бывает в любом случае, если некоторые люди хотят «время бизнеса» в кварталах и периодах, а другие предпочитают месяцы.Или если у вас есть финансовый год, который проходит апрель-апрель.
Другие советы
Вы можете использовать подвыбор.Вы можете найти дополнительную информацию об этом страница и это страница:
Когда участник указан в пункте оси, тогда элемент с его подъемами и потомками включен в пространство субэкта подэлекта;Все не упомянутые члены братьев и сестер, в пункте оси или слайсера, и их потомки отфильтрованы с подпространства.Таким образом, пространство внешнего отбора было ограничено существующими членами в пункте оси или оговорке Slicer, с их поднятыми и потомками, как упоминалось ранее.
Вот пример:
SELECT { [Customer].[Customer Geography].[Country].&[Australia]
, [Customer].[Customer Geography].[Country].&[United States]
} ON 1
, {[Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount]} ON 0
FROM ( SELECT {[Customer].[Customer Geography].[Country].&[Australia]
, [Customer].[State-Province].&[WA]&[US]} ON 0
FROM [Adventure Works]
)
Результат будет содержать одну строку для Autralia
и еще один для United States
.С помощью подвыбора я ограничил значение United Stated
к Washington
состояние.
Один из способов сделать это с Mondrian, как следует следующим образом
WITH MEMBER [Measures].[Units Shipped2] AS
SUM
(
{
exists([Store].[Store Country].currentmember.children,{[Store].[USA].[WA],[Store].[USA].[OR]})
},[Measures].[Units Shipped]
)
MEMBER [Measures].[Warehouse Sales2] AS
SUM
(
{
exists([Store].[Store Country].currentmember.children,{[Store].[USA].[WA],[Store].[USA].[OR]})
},[Measures].[Warehouse Sales]
)
SELECT
{[Measures].[Units Shipped2],[Measures].[Warehouse Sales2]} ON 0,
NON EMPTY [Store].[Store Country].Members on 1
FROM [Warehouse]
.
Я не уверен, будет ли фильтрация будет сделана в SQL, как ниже, и дайте хорошую производительность или выполнить локально
select Country, sum(unit_shipped)
where state in ('WA','OR' )
group by Country
.