X for Dummies

AX 4 OLAP Microsoft SQL Analysis Services Server Bug

Publicado em AX40, X++, 08/09/2009, por Edvandro Santos

0


OLAP auxilia os funcionários na tomada de decisões ao analisar os dados de uma área funcional da empresa.  Isso quando falamos no perfil de Usuários. Já quando seu papel é desenvolvedor, responsável pela criação dos cubos, aí a questão muda de foco:

Erro ao transferir cubo pro Microsoft SQL Analysis Services Server

Ao criar o cubo, o AX cria um modelo de dados chamado SMDL , um modelo de relatório em formato XML para a comunicação das informações do cubo do AX com o formato do mesmo no Banco de dados (SASS). Com isso, a relação entre o dicionário de dados do AX e do banco de dados é estabelecida, informações como índices, campos de tabelas, registros, etc. O problema está quando existe um campo cujo tipo corresponde a um array: Quando esse campo não é um existente no sistema, o erro acima é exibido ao processar o cubo.

Analisando o problema, descobri um código fixado para a classe que processa as dimensões de visualização do cubo e seus níveis de agrupamento, e foi então que descobri o tratamento dos campos, em especial, array:

Código selecionado que 'trata' variáveis do tipo array para criar os cubos OLAP

Como podem ver, o desenvolvedor que tratou dessa integração não considerou que em nossas customizações poderemos ter campos de tabela do tipo array que não seja Dimension. Com isso, ao fazer o mapeamento entre campos do AX com os campos no banco de dados, havia conflito, uma vez que os nomes são distintos.

Imagine que temos uma customização onde na tabela de Projetos possuímos um campo cujo EDT é um array e chama-se ProjectLevel. Ele tem 3 posições:

1 – Contrato

2 – Lote

3 – Projeto

Sendo assim, ao criar um cubo com o envolvimento dessa tabela, no momento em que este for processado,  o mapeamento (via teste chinês) será da seguinte maneira:

Campo no AX Campo no Database índice do array
ProjectLevel ProjectLever 1
ProjectLevel2_ ProjectLever2_ 2
ProjectLevel2_ ProjectLever3_ 3

O erro é gerado a partir do índice 2, no momento em que o nome do campo no AX é diferente do Database (No AX, o campo ProjectLevel sempre terá esse nome,o que muda é o índice do mesmo). Atualmente o código fixado nesse processo atende somente ao EDT Dimension. Assim, o resultado ocorre como o esperado:

Campo no AX Campo no Database índice do array
Dimension Dimension 1
Dimension Dimension2_ 2
Dimension Dimension3_ 3

E assim, o cubo é processado corretamente.

Correção

Para quem interessar, a correção desse bug encontra-se disponível para download aqui.


Posts relacionados


    Fatal error: Call to undefined function wp_related_posts() in /home/storage/8/42/49/axfordummies/public_html/wp-content/themes/axfordummies/single.php on line 33