Skip to main content
Announcements
Global Transformation Awards submissions are open! SUBMIT YOUR STORY
cancel
Showing results for 
Search instead for 
Did you mean: 
AlissonPanstein
Contributor II

puxar um SQL pronto para o Qlikview com números decimais e não inteiros!!

Bom dia,

estou enfrentando um problema relacionado números inteiros, tenho uma base de dados com um SQL pronto de outros software, quando eu realizo a busca ele retornar as informações referente a todos os números de forma decimal, entretanto em  outros Software, exemplo, PL, no Excel e no Power BI, porém quando eu executo o Script no Qlikview ele me retornar os valores de 3 colunas em números inteiro, entretanto eu preciso que me retorne em valores com casas decimais

enfatizando que já realizei testes com esse parâmetro 

SET NumFormat='#.##0,00';

e varios ouros formatos, porém ele não me retornar com valores decimais de nenhuma forma,

por fim para exemplificar, quero transformar o meu arquivo QVW em um QVD para depois conseguir transformar em CSV, porém quando eu realizo o ultimo extrator no CSV ele fica com os números inteiros, já tentei inúmeras formar, porém não consigo solucionar esse problema

alguém poderia me ajudar, 

segue o SQL com os parâmetros

SELECT
fatura,
CGC,
nome,
m.ano,
m.mes,
SUM(m.margem_calculada) / SUM(m.valor_total) AS perc_mc_total,
SUM(m.margem_apurada) / SUM(m.valor_total) AS perc_mc_apurada, sum (valor_total) valor_total,
sum(m.margem_apurada) margem_apurada
FROM (
SELECT
TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')) AS ano,
TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')) AS mes,
n.numreg,
cgc,
nome,
fatura,
n.valor_total,
SUM(n.margem_calculada) AS margem_calculada,
SUM(n.margem_apurada) AS margem_apurada
FROM (
SELECT
a.numreg,
a.fatura,
a.cgc,
f.nome,
a.operacao,
a.dt_emissao,
a.valor_total,
b.produto,
b.cor,
b.gtam,
e.representante,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
e.preco_liquido,
e.perc_mc,
e.perc_mc_apr,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
e.perc_mc / 100 AS margem_calculada,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
e.perc_mc_apr / 100 AS margem_apurada
FROM vestis21.movfat a
INNER JOIN vestis21.pedfat b ON a.numreg = b.numreg_movfat
INNER JOIN vestis21.cadmat c ON b.produto = c.produto
INNER JOIN vestis21.linha d ON c.linha = d.linha
INNER JOIN vestis21.v_vendas_1 e ON b.pedido = e.numero
AND b.produto = e.produto
AND b.gtam = e.gtam
AND b.cor = e.cor
INNER JOIN vestis21.parceiro f ON a.cgc = f.cgc
WHERE a.prod_mat = 'P'
AND NVL(e.expurgar, 'F') = 'F'
AND vestis21.financeiro.PossuiDuplicata(a.numreg) = 'T'
AND d.negocio = 'F'

UNION ALL

SELECT
a.numreg,
a.fatura,
a.cgc,
f.nome,
a.operacao,
a.dt_emissao,
a.valor_total,
b.produto,
b.cor,
b.gtam,
e.representante,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
e.preco_liquido,
e.perc_mc,
e.perc_mc_apr,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
e.perc_mc / 100 AS margem_calculada,
(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
e.perc_mc_apr / 100 AS margem_apurada
FROM vestis05.movfat a
INNER JOIN vestis05.pedfat b ON a.numreg = b.numreg_movfat
INNER JOIN vestis05.cadmat c ON b.produto = c.produto
INNER JOIN vestis05.linha d ON c.linha = d.linha
INNER JOIN vestis05.v_vendas_1 e ON b.pedido = e.numero
AND b.produto = e.produto
AND b.gtam = e.gtam
AND b.cor = e.cor
INNER JOIN vestis05.parceiro f ON a.cgc = f.cgc
WHERE a.prod_mat = 'P'
AND NVL(e.expurgar, 'F') = 'F'
AND vestis05.financeiro.PossuiDuplicata(a.numreg) = 'T'
AND d.negocio = 'F'
) n
GROUP BY TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')), TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')), fatura, cgc, nome, n.numreg, n.valor_total
) m
GROUP BY fatura, CGC, nome, m.ano, m.mes;


Por fim as colunas que precisam ser realizadas em numero decimal são 

PERC_MC_TOTAL
PERC_MC_APURADA
VALOR_TOTAL
MARGEM_APURADA

Muito obrigado!!
 

7 Replies
marksouzacosta

Bom dia @AlissonPanstein,

A primeira coisa que você tem que estudar é entender como o Qlik está interpretando os seus valores. Abra o Data Model do seu QVW, clique com o botão direito em cima da coluna que você está investigando e veja as tags. No meu exemplo, a minha coluna Valor % está sendo interpretada como texto mas desejo que os valores sejam convertidos para numerico.

marksouzacosta_0-1723209138520.png

Repare no alinhamento dos valores a esquerda, significando que são textos.
Valores alinhados a direita significam valores numéricos, como a coluna Matrícula.

marksouzacosta_1-1723209164923.png

No meu caso, eu preciso informar pro Qlik quais são meus separadores de milhar e decimais. Depois disso ajustado, eu apenas mudo a formatação da minha coluna usando a função Num:

marksouzacosta_2-1723210445625.png

Aqui são os valores salvos no CSV:

marksouzacosta_3-1723210494172.png

 

Segue o código caso precise:

SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='$#.##0,00;-$#.##0,00';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='en-US';
SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET LongMonthNames='January;February;March;April;May;June;July;August;September;October;November;December';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
SET LongDayNames='Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday';

Temp:
LOAD 
	Matrícula,
	[Valor %],
	Num([Valor Int],'#.##0,00') AS [Valor Int],
	[Valor Liq. Dep.]
FROM
[C:\Users\marcosta\Downloads\Fatura 20_01_2014.xlsx]
(ooxml, embedded labels, table is Sheet1);


STORE  Temp INTO [C:\Users\marcosta\Downloads\Fatura 20_01_2014.csv](txt);

Exit Script;

 

Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com

AlissonPanstein
Contributor II
Author

Fiz essa alterações, mas o problema persiste,

veja como está na tabela 

AlissonPanstein_0-1723214481204.png

ela já está lendo as informações como numero, o problema é que não está identificando as casas decimais, de todas essas colunas descrita abaixo,

PERC_MC_TOTAL;
PERC_MC_APURADA;
TOTAL_VALUE;
MARGEM_APURADA;


observe como estão as colunas quando carregadas no Script,

AlissonPanstein_1-1723215968921.png

 

percebe que todas as colunas estão apenas com os números inteiros, por outro lado, eu já realizei teste e consegui colocar esse parâmetros com as casas decimais, porém ela gera um erro de syntax, segue abaixo o erro juntamente com o parâmetro que eu consigo realizar essa atividade neste mesmo Script 

AlissonPanstein_2-1723216108255.png

quando eu confirmo o erro ele terminar de executar o script, e realiza a atividade como esperado, porém acontece esse erro, no SET  que eu utilizei para realizar essa tarefa, apresentado abaixo:

AlissonPanstein_3-1723216244003.png

olha como ficou minhas colunas após isso da maneira como eu espero que fique, porém preciso retirar esse erro, ele apresenta todos os valores em formato numérico e decimais,

AlissonPanstein_4-1723216279374.png

por fim quando eu ajusto a Syntax "=" que o software Qlikview diz estar errada ele não apresentar os valores como números decimais e retorna os números inteiros

ao fim o objetivo desta atividade é criar um QVD ou um CSV deste arquivo, porém os números precisam estar em formato decimal,

consegue me ajudar nessa situação, o que eu deveria fazer para resolver isso ?

marksouzacosta

Sua sintaxe no SET ali não está correta.

Pra alterar a formatação dos seus números você terá que usar a função NUM e especificar o formato que você deseja que o QlikView aplique nos valores dos seus campos.

Fiz uma versão do código com uma variável com meu formato desejado e adicionei uns valores negativos também para testar o código:

SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='$#.##0,00;-$#.##0,00';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='en-US';
SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET LongMonthNames='January;February;March;April;May;June;July;August;September;October;November;December';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
SET LongDayNames='Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday';

SET NumFormat = '#.##0,00';

Temp:
LOAD 
	Matrícula,
	[Valor %],
	Num([Valor Int],'$(NumFormat)') AS [Valor Int],
	Num([Valor Int]*(-1000),'$(NumFormat)') AS [Valor Int Negativo],
	[Valor Liq. Dep.]
FROM
[C:\Users\marcosta\Downloads\Fatura 20_01_2014.xlsx]
(ooxml, embedded labels, table is Sheet1);

Olhe o resultado:

marksouzacosta_0-1723218767154.png

 

Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com

AlissonPanstein
Contributor II
Author

Executei o Script com a Syntax correta conforme você falou, já havia feito essa alteração anteriormente e os valores retornaram como números inteiros novamente 

AlissonPanstein_0-1723220851787.png

por fim aplicando o LOAD no final do SQL e puxando apenas as colunas que eu necessito que sejam alteradas para números decimais os valores continuam retornando como números inteiros, 

 

AlissonPanstein_1-1723221067882.png

 

não sei mais como prosseguir referente a essa situação o Qlik não consegue transformar utilizando apenas esse parametro definido por SET NumFormat = '#.##0,00'; conforme você havia comentado,

 

 

marksouzacosta

Seu código parece que esta faltando algo. Você consegue colocar ele aqui na íntegra?

Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com

AlissonPanstein
Contributor II
Author

claro, segue o código na integra, eu não sei sinceramente o que está de errado neste código, já revisei umas 3 vezes e não consigo encontrar o problema!!

SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='pt-BR';
SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';
SET LongMonthNames='janeiro;fevereiro;março;abril;maio;junho;julho;agosto;setembro;outubro;novembro;dezembro';
SET DayNames='seg;ter;qua;qui;sáb;dom';
SET LongDayNames='segunda-feira;terça-feira;quarta-feira;quinta-feira;ta-feira;sábado;domingo';
SET NumFormat = '#.##0,00';
 
SET ErrorMode='0';
SET ErrorMode='1';
 
Jasper_New:
    SELECT 
        fatura, 
        CGC, 
        nome,
        m.ano,
        m.mes,
    TO_NUMBER(SUM(m.margem_calculada)) / TO_NUMBER(SUM(m.valor_total)) AS perc_mc_total,
    TO_NUMBER(SUM(m.margem_apurada)) / TO_NUMBER(SUM(m.valor_total)) AS perc_mc_apurada,
    TO_NUMBER(SUM(m.valor_total)) AS valor_total,
    TO_NUMBER(SUM(m.margem_apurada)) AS margem_apurada
FROM (
    SELECT 
        TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')) AS ano,
        TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')) AS mes,
        n.numreg,
        cgc,
        nome,
        fatura,
        n.valor_total,
        TO_NUMBER(SUM(n.margem_calculada)) AS margem_calculada,
        TO_NUMBER(SUM(n.margem_apurada)) AS margem_apurada
    FROM (
        SELECT 
            a.numreg,
            a.fatura,
            a.cgc,
            f.nome,
            a.operacao,
            a.dt_emissao,
            a.valor_total,
            b.produto,
            b.cor,
            b.gtam,
            e.representante,
            TO_NUMBER(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
            e.preco_liquido,
            e.perc_mc,
            e.perc_mc_apr,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc / 100) AS margem_calculada,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc_apr / 100) AS margem_apurada
        FROM vestis21.movfat a
        INNER JOIN vestis21.pedfat b ON a.numreg = b.numreg_movfat
        INNER JOIN vestis21.cadmat c ON b.produto = c.produto
        INNER JOIN vestis21.linha d ON c.linha = d.linha
        INNER JOIN vestis21.v_vendas_1 e ON b.pedido = e.numero
                                          AND b.produto = e.produto
                                          AND b.gtam = e.gtam
                                          AND b.cor = e.cor
        INNER JOIN vestis21.parceiro f ON a.cgc = f.cgc
        WHERE a.prod_mat = 'P'
        AND NVL(e.expurgar, 'F') = 'F'
        AND vestis21.financeiro.PossuiDuplicata(a.numreg) = 'T'
        AND d.negocio = 'F'
 
        UNION ALL
 
        SELECT 
            a.numreg,
            a.fatura,
            a.cgc,
            f.nome,
            a.operacao,
            a.dt_emissao,
            a.valor_total,
            b.produto,
            b.cor,
            b.gtam,
            e.representante,
            TO_NUMBER(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
            e.preco_liquido,
            e.perc_mc,
            e.perc_mc_apr,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc / 100) AS margem_calculada,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc_apr / 100) AS margem_apurada
        FROM vestis05.movfat a
        INNER JOIN vestis05.pedfat b ON a.numreg = b.numreg_movfat
        INNER JOIN vestis05.cadmat c ON b.produto = c.produto
        INNER JOIN vestis05.linha d ON c.linha = d.linha
        INNER JOIN vestis05.v_vendas_1 e ON b.pedido = e.numero
                                          AND b.produto = e.produto
                                          AND b.gtam = e.gtam
                                          AND b.cor = e.cor
        INNER JOIN vestis05.parceiro f ON a.cgc = f.cgc
        WHERE a.prod_mat = 'P'
        AND NVL(e.expurgar, 'F') = 'F'
        AND vestis05.financeiro.PossuiDuplicata(a.numreg) = 'T'
        AND d.negocio = 'F'
    ) n
    GROUP BY TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')), TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')), fatura, cgc, nome, n.numreg, n.valor_total
) m
GROUP BY fatura, CGC, nome, m.ano, m.mes;

------------ Abaixo está o LOAD conforme havia comentado com você------------------

LOAD
//Num(perc_mc_total,'$(NumFormat)') AS perc_mc_total_Right,
//Num(perc_mc_apurada,'$(NumFormat)') AS perc_mc_apurada_Right,
//Num(valor_total,'$(NumFormat)') AS valor_total_Right,
//Num(margem_apurada,'$(NumFormat)') AS margem_apurada_Right,
 
//STORE Jasper_New into C:\Users\Alisson.Panstein\Desktop\Nova pasta\Jasper\Extrator_Margem_Lucro_Ap_Jasper_New.qvd(QVD);
//DROP Table Jasper_New;
marksouzacosta

Eu não consigo testar aqui no meu lado, mas tente esse código. Use ele na integra caso contrário alguma parte de outro código pode atrapalhar esse script.

 

SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='pt-BR';
SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';
SET LongMonthNames='janeiro;fevereiro;março;abril;maio;junho;julho;agosto;setembro;outubro;novembro;dezembro';
SET DayNames='seg;ter;qua;qui;sáb;dom';
SET LongDayNames='segunda-feira;terça-feira;quarta-feira;quinta-feira;ta-feira;sábado;domingo';
SET NumFormat = '#.##0,00';
 
Jasper_New:
SELECT 
        fatura, 
        CGC, 
        nome,
        m.ano,
        m.mes,
    TO_NUMBER(SUM(m.margem_calculada)) / TO_NUMBER(SUM(m.valor_total)) AS perc_mc_total,
    TO_NUMBER(SUM(m.margem_apurada)) / TO_NUMBER(SUM(m.valor_total)) AS perc_mc_apurada,
    TO_NUMBER(SUM(m.valor_total)) AS valor_total,
    TO_NUMBER(SUM(m.margem_apurada)) AS margem_apurada
FROM (
    SELECT 
        TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')) AS ano,
        TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')) AS mes,
        n.numreg,
        cgc,
        nome,
        fatura,
        n.valor_total,
        TO_NUMBER(SUM(n.margem_calculada)) AS margem_calculada,
        TO_NUMBER(SUM(n.margem_apurada)) AS margem_apurada
    FROM (
        SELECT 
            a.numreg,
            a.fatura,
            a.cgc,
            f.nome,
            a.operacao,
            a.dt_emissao,
            a.valor_total,
            b.produto,
            b.cor,
            b.gtam,
            e.representante,
            TO_NUMBER(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
            e.preco_liquido,
            e.perc_mc,
            e.perc_mc_apr,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc / 100) AS margem_calculada,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc_apr / 100) AS margem_apurada
        FROM vestis21.movfat a
        INNER JOIN vestis21.pedfat b ON a.numreg = b.numreg_movfat
        INNER JOIN vestis21.cadmat c ON b.produto = c.produto
        INNER JOIN vestis21.linha d ON c.linha = d.linha
        INNER JOIN vestis21.v_vendas_1 e ON b.pedido = e.numero
                                          AND b.produto = e.produto
                                          AND b.gtam = e.gtam
                                          AND b.cor = e.cor
        INNER JOIN vestis21.parceiro f ON a.cgc = f.cgc
        WHERE a.prod_mat = 'P'
        AND NVL(e.expurgar, 'F') = 'F'
        AND vestis21.financeiro.PossuiDuplicata(a.numreg) = 'T'
        AND d.negocio = 'F'
 
        UNION ALL
 
        SELECT 
            a.numreg,
            a.fatura,
            a.cgc,
            f.nome,
            a.operacao,
            a.dt_emissao,
            a.valor_total,
            b.produto,
            b.cor,
            b.gtam,
            e.representante,
            TO_NUMBER(NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) AS qtde,
            e.preco_liquido,
            e.perc_mc,
            e.perc_mc_apr,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc / 100) AS margem_calculada,
            TO_NUMBER((NVL(b.qtde1, 0) + NVL(b.qtde2, 0) + NVL(b.qtde3, 0) +
            NVL(b.qtde4, 0) + NVL(b.qtde5, 0) + NVL(b.qtde6, 0) +
            NVL(b.qtde7, 0) + NVL(b.qtde8, 0) + NVL(b.qtde9, 0) +
            NVL(b.qtde10, 0) + NVL(b.qtde11, 0) +
            NVL(b.qtde12, 0) + NVL(b.qtdeu, 0)) * e.preco_liquido *
            e.perc_mc_apr / 100) AS margem_apurada
        FROM vestis05.movfat a
        INNER JOIN vestis05.pedfat b ON a.numreg = b.numreg_movfat
        INNER JOIN vestis05.cadmat c ON b.produto = c.produto
        INNER JOIN vestis05.linha d ON c.linha = d.linha
        INNER JOIN vestis05.v_vendas_1 e ON b.pedido = e.numero
                                          AND b.produto = e.produto
                                          AND b.gtam = e.gtam
                                          AND b.cor = e.cor
        INNER JOIN vestis05.parceiro f ON a.cgc = f.cgc
        WHERE a.prod_mat = 'P'
        AND NVL(e.expurgar, 'F') = 'F'
        AND vestis05.financeiro.PossuiDuplicata(a.numreg) = 'T'
        AND d.negocio = 'F'
    ) n
    GROUP BY TO_NUMBER(TO_CHAR(n.dt_emissao, 'yyyy')), TO_NUMBER(TO_CHAR(n.dt_emissao, 'mm')), fatura, cgc, nome, n.numreg, n.valor_total
) m
GROUP BY fatura, CGC, nome, m.ano, m.mes;
 
JasperModificado:
LOAD
Num(perc_mc_total,'$(NumFormat)') AS perc_mc_total_Right,
Num(perc_mc_apurada,'$(NumFormat)') AS perc_mc_apurada_Right,
Num(valor_total,'$(NumFormat)') AS valor_total_Right,
Num(margem_apurada,'$(NumFormat)') AS margem_apurada_Right
RESIDENT
Jasper_New
;
 
DROP TABLE Jasper_New;
 
Exit Script;

Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com