Compartilhar via


Criando conjuntos nomeados em MDX (MDX)

Uma expressão de conjunto pode ser uma declaração longa e complexa e, portanto, difícil de seguir ou entender. Ou ainda, a expressão de conjunto pode ser usada com tanta freqüência que sua definição repetidamente passa a ser penosa. Para ajudar a facilitar o trabalho com expressões longas, complexas e bastante usadas, a linguagem MDX permite que você defina esse tipo de expressão como um conjunto nomeado.

Basicamente, um conjunto nomeado é uma expressão de conjunto para a qual um alias foi atribuído. Um conjunto nomeado pode incorporar todos os membros ou funções que normalmente podem ser incorporados a um conjunto. Como a linguagem MDX trata o conjunto nomeado como uma expressão de conjunto, é possível usar esse alias em qualquer lugar que aceite uma expressão de conjunto.

Você pode definir um conjunto nomeado para ter um destes contextos:

  • Com escopo da consulta   Para criar um conjunto nomeado que seja definido como parte de uma consulta MDX e, portanto, cujo escopo esteja limitado à consulta, use a palavra-chave WITH. Em seguida, você pode usar o conjunto nomeado em uma instrução MDX SELECT. Usando essa abordagem, o conjunto nomeado criado pelo uso da palavra-chave pode ser alterado sem afetar a instrução SELECT.

    Para obter mais informações sobre como usar a palavra-chave WITH para criar conjuntos nomeados, consulte Criando conjuntos nomeados no escopo da consulta (MDX).

  • **Com escopo da sessão   **Para criar um conjunto nomeado cujo escopo seja mais amplo que o contexto da consulta, ou seja, cujo escopo seja o tempo de vida da sessão MDX, use a instrução CREATE SET. Um conjunto nomeado definido pela instrução CREATE SET estará disponível para todas as consultas MDX dessa sessão. A instrução CREATE SET faz sentido, por exemplo, em um aplicativo cliente que reutiliza consistentemente um conjunto em diversas consultas.

    Para obter mais informações sobre como usar a instrução CREATE SET para criar conjuntos nomeados em uma sessão, consulte Criando conjuntos nomeados no escopo da sessão (MDX).

  • **Com escopo global   **Para criar um conjunto nomeado cujo escopo seja mais amplo que o contexto da sessão do usuário, ou seja, cujo escopo seja o tempo de vida da instância em execução, use a instrução CREATE SET dentro do script MDX Padrão. Consulte O script básico de MDX (MDX) para obter mais informações. Um conjunto nomeado definido pela instrução CREATE SET no script MDX Padrão está disponível para todos os usuários em todas as consultas MDX em qualquer sessão.

O conteúdo de conjuntos nomeados pode ser avaliado no momento de criação (estático) ou a qualquer momento em que eles forem usados em uma consulta (dinâmico). A sintaxe CREATE SET [STATIC|DYNAMIC] define quando o conjunto é avaliado. Consulte Instrução CREATE SET (MDX)Instrução CREATE SET (MDX) para obter mais informações. Por padrão, os conjuntos serão criados como STATIC se nenhuma palavra-chave for especificada na instrução create.

Os conjuntos nomeados com comportamento dinâmico podem ser definidos globalmente (no script MDX Padrão) ou no escopo de uma sessão. No entanto, esses conjuntos nomeados só são avaliados quando uma consulta está sendo resolvida (escopo de consulta). Ocorrerá um erro em qualquer tentativa de avaliar um conjunto dinâmico em uma sessão ou escopo global. Isso também se aplica a referências indiretas de conjuntos dinâmicos. O seguinte é uma lista de cálculos, sejam definidos globalmente ou no escopo da sessão, que podem referenciar conjuntos nomeados dinâmicos.

  • Membros calculados

  • Conjuntos nomeados dinâmicos

  • KPIs

  • Expressões RHS (do lado direito) em uma expressão de atribuição

  • Expressão de condição de cálculo de célula

  • Expressão de valor de cálculo de célula

Dentro de qualquer consulta MDX, é possível referenciar um conjunto dinâmico porque o conjunto dinâmico será avaliado no escopo da consulta.

Observação sobre cuidadosCuidado

Como conjuntos dinâmicos são avaliados durante o comando CREATE SET, um link para todos os objetos (estáticos ou dinâmicos) do qual o conjunto dinâmico depende é criado. Portanto, qualquer ou todos os objetos referenciados não podem ser descartados até que o conjunto dinâmico seja descartado. Por exemplo, se um conjunto nomeado dinâmico for criado na sessão que referencia um membro calculado pela sessão, esse membro calculado não poderá ser excluído enquanto o conjunto nomeado dinâmico ainda existir.

Resolução de conjuntos nomeados dinâmicos

Em qualquer momento, podem existir até três versões de um conjunto dinâmico:

  • Uma no escopo global usado no script de cubo

  • Uma no escopo de sessão usado em cálculos de sessão

  • Uma no escopo de consulta usado em cálculos de consulta

A versão usada no cálculo depende completamente do contexto de sua expressão e de como o conjunto nomeado dinâmico é referenciado. Isso se aplica principalmente a referências indiretas.

Por exemplo, se houver um membro calculado pela sessão que usa um conjunto nomeado dinâmico de sessão e você usar esse membro calculado em uma consulta, o conjunto nomeado será avaliado no escopo da sessão, e a cláusula WHERE da consulta não terá nenhum efeito no conjunto nomeado. No entanto, se você usar o mesmo conjunto nomeado dinâmico diretamente na consulta, o conjunto nomeado será avaliado no escopo da consulta, e a cláusula WHERE poderá afetar os resultados do conjunto nomeado.