Como agrupar e filtrar na mesma dimensão no MDX
Pergunta
Quero criar um gráfico de barras com uma barra para cada mês e alguma medida.
Mas também quero filtrar em um intervalo de dias que pode não se sobrepor completamente em parte do mês.
Quando isso acontecer, gostaria que a contagem agregada desses meses agregasse apenas os dias que se enquadram no meu intervalo de datas e não obtivesse o agregado do mês inteiro.
Isso é possível com MDX e, se for, como deve ser a solicitação?
Solução
Crie uma dimensão secundária, usando uma dimensão virtual da dimensão original.Use uma dimensão no Onde e outra no Select.
Isso geralmente acontece de qualquer maneira se algumas pessoas querem "tempo comercial" de trimestres e períodos, e outros preferem meses.Ou se você tiver um exercício que é executado em abril a abril.
Outras dicas
Você pode usar subseleção.Você pode encontrar mais informações sobre isso página e isto página:
Quando um membro é especificado na cláusula do eixo, esse membro com seus ascendentes e descendentes é incluído no espaço do sub -cubo para o subseleção;Todos os membros de irmãos não mencionados, na cláusula de eixo ou slicer, e seus descendentes são filtrados do subespaço.Dessa forma, o espaço da seleção externa foi limitado aos membros existentes na cláusula do eixo ou na cláusula de fatia, com seus ascendentes e descendentes, como mencionado anteriormente.
Aqui está um exemplo:
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]
)
O resultado conterá uma linha para Autralia
e outro para United States
.Com a subseleção, restrinjai o valor de United Stated
para o Washington
estado.
Uma maneira que encontrei de fazer isso com Mondrian é a seguinte
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]
Não tenho certeza se a filtragem será feita em SQL como abaixo e dará bom desempenho ou será executada localmente
select Country, sum(unit_shipped)
where state in ('WA','OR' )
group by Country