Pergunta

Eu preciso definir um membro calculado em MDX (este é SAS OLAP, mas eu apreciaria respostas de pessoas que trabalham com diferentes implementações de OLAP de qualquer maneira).

valor da nova medida deve ser calculado a partir de uma medida existente, aplicando uma condição de filtro adicional. Acho que vai ser mais clara com um exemplo:

  • medida existente: "O tráfego total"
  • dimensão existente: "Direção" ( "In" ou "Out")
  • Eu preciso criar um membro calculado "O tráfego de entrada", o que equivale a "O tráfego total" com um filtro adicional (Direction = "In")

O problema é que eu não sei MDX e eu estou em um calendário muito apertado (tão triste por uma questão novato). O melhor que eu poderia vir acima com é:

([Measures].[Total traffic], [Direction].[(All)].[In])

O que quase funciona, exceto para as células com direção específica:

exemplo

Portanto, parece que o filtro "intrínseco" na Direcção é substituído com o meu próprio filtro). Eu preciso de um cruzamento do filtro "intrínseco" e minha própria. Minha intuição é que ele tem a ver com cruzamento [Direction].[(All)].[In] com as coordenadas intrínsecas da célula que está sendo avaliado, mas é difícil saber o que eu preciso sem primeiro ler sobre o assunto:)

[editar] eu acabei com

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

.. mas pelo menos no SAS OLAP isso faz com que consultas extras a serem realizadas (para calcular o valor da [in]) para o conjunto de dados subjacente, então eu não usá-lo no final.

Foi útil?

Solução

Para começar, você pode definir uma nova medida calculada em sua MDX, e dizer-lhe para usar o valor de uma outra medida, mas com um filtro aplicado:

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

Sempre que você mostrar a nova medida em um relatório, ele irá se comportar como se tem um filtro de 'Direction> Em' nele, independentemente da dimensão Direction é usado em tudo.

Mas no seu caso, você quer a dimensão direção a tomar precedência quando usado .... assim que as coisas ficam um pouco confuso. Você terá que detectar se esta dimensão está em uso, e agir em conformidade:

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

Para ver se a dimensão está em uso, vamos verificar se a célula atual está usando OUT. Se assim for, podemos voltar Tráfego Total como ela é. Se não, podemos dizer que para usar em na nossa tupla.

Outras dicas

Eu acho que você deve colocar uma coluna em sua tabela de fatos Tráfego Total para IN indicação / OUT & criar uma tabela Dim para os valores em &. Você pode, então, analisar os dados com base na IN & Out.

Também dê uma olhada em esta questão , descreve o mesmo problema e não há uma resposta diferente postado lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top