Как группировать и фильтровать по одному и тому же измерению в MDX

StackOverflow https://stackoverflow.com//questions/12681096

  •  12-12-2019
  •  | 
  •  

Вопрос

Я хочу создать гистограмму с полосой для каждого месяца и некоторой мерой.

Но я также хочу отфильтровать диапазон дней, который может не полностью перекрывать часть месяца.

Когда это произойдет, я бы хотел, чтобы совокупный подсчет за этот месяц суммировался только за те дни, которые попадают в мой диапазон дат, а не за весь месяц.

Возможно ли это с помощью 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 
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top