- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
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.
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:
Aqui são os valores salvos no CSV:
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fiz essa alterações, mas o problema persiste,
veja como está na tabela
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,
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
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:
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,
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 ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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:
Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
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,
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,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!!
------------ Abaixo está o LOAD conforme havia comentado com você------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com