Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde
Estou tratando de criar dois campos novos mais com um mesmo criterio con diferentes nomes:
A logica é, se o segmento for 52 e a unidade de negocio 010 a unidade deve chamarse NEW HOLLAND e valor deve ser o 50% do valor total.
mesmo criterio deve ser aplicado mais a unidade deve chamarse CASE IH.
Assim o valor de Estoque que estava unificada na unidade 010 vai ser dividida em dois, uma chamada NEW HOLLAND e outra CASE.
Vai o tratamento=
/////UNIDADES
text (If(Match(zx7_segmen, '52')and( Match(zx7_unidad, '010')), 'UND NEW HOLLAND',
text (If(Match(zx7_segmen, '52')and( Match(zx7_unidad, '010')), 'UND CIH' , zx7_unidad )))) as FATO2_UNIDAD_Ajustada
Nesas duas dimensoes novas vou asignar 50% de um valor , para o resto das unidades se mantera o valor padrao:
///VALORES
If(FATO2_UNIDAD_Ajustada,'UND NEW HOLLAND', 'UND CIH'),(FATO2_Qtde * FATO2_PrecoMedio/2), FATO2_Qtde * FATO2_PrecoMedio as FATO_Valor2,
*O inconveniente que estou e nas UNIDADES, quando crio as UNIDADES so pega a primeira (NEW HOLLAND), se eu agrego algum segmento so pega a diferenca, entendo que nao seja permitido fazer isso, nem tenho certeza que seja uma boa pratica de tratamento
Agradeceria alguma ajuda de vcs.
Nesse caso o meu script iria funcionar de acordo, visto que criei ambas as unidades, sem telas na tabela, somente pelos critérios que você passou, Seg = 52 e unidade 010.
A única coisa para melhorar o script, para deixa-lo mais dinâmico seria colocar em algum arquivo (txt ou planilha) as dimensões de como você pretende dividir seus segmentos/unidades.
Segue exemplo e arquivos:
TabelaTotal:
load
RowNo() as Id,
*;
Load * Inline
[
zx7_segmen,zx7_unidad,Valor
1,001,100
52,010,1000
51,010,440
];
left join (TabelaTotal)
LOAD Segmento as zx7_segmen,
Unidade as zx7_unidad,
[Nome Unidades]
FROM
(ooxml, embedded labels, table is Plan1);
TabelaRateio:
Load
*,
SubField([Nome Unidades],'|') as [Nome Unidade],
Valor/(SubStringCount([Nome Unidades],'|')+1) as [Valor Rateado]
Resident TabelaTotal; // Tabela que tem todos os seus dados
drop table TabelaTotal;
Sendo assim, se você colocar duas unidades no arquivo segmento, irá dividir o arquivo por dois, ou se forem 3, por três.
Fiz um exemplo de cada, dando o resultado:
Olá Marco,
Pelo que entendi, você tem apenas a possível linha com Segmento = 52 e Unidade = 010 para então redistrubuir entre as dois nomes que você quer.
Do jeito que você colocou, eu faria o seguinte:
TabelaTotal:
load
RowNo() as Id,
*;
Load * Inline
[
zx7_segmen,zx7_unidad,Valor
1,001,100
52,010,200
52,010,44
];
Tabela_Seg52_Unid_010:
Load
*,
SubField([Nome Unidades],'|') as [Nome Unidade],
Valor/(SubStringCount([Nome Unidades],'|')+1) as [Valor Rateado];
Load
*,
'NEWHOLLAND|CASE IH' as [Nome Unidades]
Resident TabelaTotal // Tabela que tem todos os seus dados
where zx7_segmen='52' and zx7_unidad='010';
// Seleciona o resto dos seus dados
NoConcatenate
TabelaOutros:
Load
*
Resident TabelaTotal // Tabela que tem todos os seus dados
where zx7_segmen<>'52' and zx7_unidad<>'010';
Concatenate(Tabela_Seg52_Unid_010)
Load
*
Resident TabelaOutros;
drop tables TabelaTotal,TabelaOutros;
Como resultado desse script, tem-se (fiz em View, mas da pra usar a mesma logica no Sense):
A tabela da esquerda são os dados originais e a da direita as transformadas.
Nesse caso, as linhas com id 2 e 3 terão seus valores divididos igualmente pelo número de empresas no campo [Nome Unidades].
Espero que ajude,
Felipe.
Boa tarde Felipe,
obrigado pela resposta.
Para aclarar, acho que e um pouco mais simples do que eu tentei explicar, a situacao e essa:
Vamos partir que uma UNIDADE e composta de SEGMENTOS.
Exemplos=
UNIDADE CSC E COMPOSTA DE SEGMENTOS= 50,52,54,55
UNIDAD INSUMOS E COMPOSTA DE SEGMENTOS= 45.80.62
Tenho uma dimensao de unidade = UN CSC COMERCIAL COM a medida VALOR DE 1.000.000 US$
Essa dimensao debo dividirla pela metade em duas que UNIDADES que nao existem na tabela, SEMPRE QUE O SEGMENTO SEJA 52.
UN CSC NEW HOLLAND DEVE SER COMPOSTA POR SEGMENTO 52
UN CSC CASE DEVE SER COMPOSTA POR SEGMENTO 52
Nesse caso o meu script iria funcionar de acordo, visto que criei ambas as unidades, sem telas na tabela, somente pelos critérios que você passou, Seg = 52 e unidade 010.
A única coisa para melhorar o script, para deixa-lo mais dinâmico seria colocar em algum arquivo (txt ou planilha) as dimensões de como você pretende dividir seus segmentos/unidades.
Segue exemplo e arquivos:
TabelaTotal:
load
RowNo() as Id,
*;
Load * Inline
[
zx7_segmen,zx7_unidad,Valor
1,001,100
52,010,1000
51,010,440
];
left join (TabelaTotal)
LOAD Segmento as zx7_segmen,
Unidade as zx7_unidad,
[Nome Unidades]
FROM
(ooxml, embedded labels, table is Plan1);
TabelaRateio:
Load
*,
SubField([Nome Unidades],'|') as [Nome Unidade],
Valor/(SubStringCount([Nome Unidades],'|')+1) as [Valor Rateado]
Resident TabelaTotal; // Tabela que tem todos os seus dados
drop table TabelaTotal;
Sendo assim, se você colocar duas unidades no arquivo segmento, irá dividir o arquivo por dois, ou se forem 3, por três.
Fiz um exemplo de cada, dando o resultado: