Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
guilherme_atj
Contributor
Contributor

Encontrar produtos que compõem 50% do valor do portfólio

Pessoal.

Estou precisando de Ajuda para identificar quantos Produtos compõem 50% do valor do meu portfólio, eu sei quantos produtos eu tenho, agora preciso somar o valor de todos e contar os mais caros até compor 50% do total do valor.

Coloquei um Exemplo em anexo.

Agradeço a Ajuda

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Guilherme,

a melhor maneira de fazer isto é usando o aggr

2019-07-24 22_16_47-QlikView x64 - [F__tmp_Valor 50%.qvw_].png

a uns anos atrás, veio um novo parâmetro no aggr que permite determinar a ordem de leitura e neste caso, basta colocar em ordem de valor descendente

 

Count(Distinct
Aggr(If(Rangesum(Above(Sum(valor)/Sum(total valor),1,RowNo()))<0.5, Produto),(Produto,(=Sum(valor),Desc))))

 

 

 

furtado@farolbi.com.br

View solution in original post

11 Replies
danilostochi
Creator II
Creator II

Boa tarde, me veio na cabeça essa solução mas deve existir outras maneiras.

1- Listo todos meus produtos e valores

2-Crio um variável que traga a contagem total / 2 

3- Ordeno eles pelo maior valor e crio um sequencial novo

4- Filtro no where a Sequencia nova <= variável  

5-Resultado tenho uma lista da metade de meu estoque 50%

 

dados:
LOAD * INLINE [
idProduto, ValorProduto
1, 10
2, "15,9"
3, "26,9"
4, "36,9"
5, "90,1"
6, "90,32"
7, "108,44"
8, "126,56"
9, "144,68"
10, "162,8"
11, "180,92"
12, "199,04"
13, "217,16"
14, "235,28"
15, "253,4"
16, "271,52"
17, "289,64"
18, "307,76"
19, "325,88"
20, 344
21, "362,12"
22, "380,24"
23, "398,36"
24, "416,48"
25, "434,6"
26, "452,72"
27, "470,84"
28, "488,96"
29, "507,08"
30, "525,2"
31, "543,32"
32, "561,44"
33, "579,56"
34, "597,68"
35, "615,8"
36, "633,92"
37, "652,04"
38, "670,16"
39, "688,28"
40, "706,4"
41, "724,52"
42, "742,64"
43, "760,76"
44, "778,88"
45, 797
46, "815,12"
47, "833,24"
48, "851,36"
49, "869,48"
50, "887,6"
51, "905,72"
52, "923,84"
53, "941,96"
54, "960,08"
55, "978,2"
56, "996,32"
57, "1014,44"
58, "1032,56"
59, "1050,68"
60, "1068,8"
61, "1086,92"
62, "1105,04"
63, "1123,16"
64, "1141,28"
65, "1159,4"
66, "1177,52"
67, "1195,64"
68, "1213,76"
69, "1231,88"
70, 1250
71, "1268,12"
72, "1286,24"
73, "1304,36"
74, "1322,48"
75, "1340,6"
76, "1358,72"
77, "1376,84"
78, "1394,96"
79, "1413,08"
80, "1431,2"
81, "1449,32"
82, "1467,44"
83, "1485,56"
84, "1503,68"
85, "1521,8"
86, "1539,92"
87, "1558,04"
88, "1576,16"
89, "1594,28"
90, "1612,4"
91, "1630,52"
92, "1648,64"
93, "1666,76"
94, "1684,88"
95, 1703
96, "1721,12"
97, "1739,24"
98, "1757,36"
99, "1775,48"
100, "1793,6"
101, "1811,72"
102, "1829,84"
103, "1847,96"
104, "1866,08"
105, "1884,2"
106, "1902,32"
107, "1920,44"
108, "1938,56"
109, "1956,68"
110, "1974,8"
111, "1992,92"
112, "2011,04"
113, "2029,16"
114, "2047,28"
115, "2065,4"
116, "2083,52"
117, "2101,64"
118, "2119,76"
119, "2137,88"
120, 2156
121, "2174,12"
122, "2192,24"
123, "2210,36"
124, "2228,48"
125, "2246,6"
126, "2264,72"
127, "2282,84"
128, "2300,96"
129, "2319,08"
130, "2337,2"
131, "2355,32"
132, "2373,44"
133, "2391,56"
134, "2409,68"
135, "2427,8"
136, "2445,92"
137, "2464,04"
138, "2482,16"
139, "2500,28"
140, "2518,4"
141, "2536,52"
142, "2554,64"
143, "2572,76"
144, "2590,88"
145, 2609
146, "2627,12"
147, "2645,24"
148, "2663,36"
149, "2681,48"
150, "2699,6"
151, "2717,72"
152, "2735,84"
153, "2753,96"
154, "2772,08"
155, "2790,2"
156, "2808,32"
157, "2826,44"
158, "2844,56"
159, "2862,68"
160, "2880,8"
161, "2898,92"
162, "2917,04"
163, "2935,16"
164, "2953,28"
165, "2971,4"
166, "2989,52"
167, "3007,64"
168, "3025,76"
169, "3043,88"
170, 3062
171, "3080,12"
172, "3098,24"
173, "3116,36"
174, "3134,48"
175, "3152,6"
176, "3170,72"
177, "3188,84"
178, "3206,96"
179, "3225,08"
180, "3243,2"
181, "3261,32"
182, "3279,44"
183, "3297,56"
184, "3315,68"
185, "3333,8"
186, "3351,92"
187, "3370,04"
188, "3388,16"
189, "3406,28"
190, "3424,4"
191, "3442,52"
192, "3460,64"
193, "3478,76"
194, "3496,88"
195, 3515
196, "3533,12"
197, "3551,24"
198, "3569,36"
199, "3587,48"
200, "3605,6"
201, "3623,72"
202, "3641,84"
203, "3659,96"
204, "3678,08"
205, "3696,2"
206, "3714,32"
207, "3732,44"
208, "3750,56"
209, "3768,68"
210, "3786,8"
211, "3804,92"
212, "3823,04"
213, "3841,16"
214, "3859,28"
215, "3877,4"
216, "3895,52"
217, "3913,64"
218, "3931,76"
219, "3949,88"
220, 3968
221, "3986,12"
222, "4004,24"
223, "4022,36"
224, "4040,48"
225, "4058,6"
226, "4076,72"
227, "4094,84"
228, "4112,96"
229, "4131,08"
230, "4149,2"
231, "4167,32"
232, "4185,44"
233, "4203,56"
234, "4221,68"
235, "4239,8"
236, "4257,92"
237, "4276,04"
238, "4294,16"
239, "4312,28"
240, "4330,4"
241, "4348,52"
242, "4366,64"
243, "4384,76"
244, "4402,88"
245, 4421
246, "4439,12"
247, "4457,24"
248, "4475,36"
249, "4493,48"
250, "4511,6"
251, "4529,72"
252, "4547,84"
253, "4565,96"
254, "4584,08"
255, "4602,2"
256, "4620,32"
257, "4638,44"
258, "4656,56"
259, "4674,68"
260, "4692,8"
261, "4710,92"
262, "4729,04"
263, "4747,16"
264, "4765,28"
265, "4783,4"
266, "4801,52"
267, "4819,64"
268, "4837,76"
269, "4855,88"
270, 4874
271, "4892,12"
272, "4910,24"
273, "4928,36"
274, "4946,48"
275, "4964,6"
276, "4982,72"
277, "5000,84"
278, "5018,96"
279, "5037,08"
280, "5055,2"
281, "5073,32"
282, "5091,44"
283, "5109,56"
284, "5127,68"
285, "5145,8"
286, "5163,92"
287, "5182,04"
288, "5200,16"
289, "5218,28"
290, "5236,4"
291, "5254,52"
292, "5272,64"
293, "5290,76"
294, "5308,88"
295, 5327
296, "5345,12"
297, "5363,24"
298, "5381,36"
299, "5399,48"
300, "5417,6"
301, "5435,72"
302, "5453,84"
303, "5471,96"
304, "5490,08"
305, "5508,2"
306, "5526,32"
307, "5544,44"
308, "5562,56"
309, "5580,68"
310, "5598,8"
311, "5616,92"
312, "5635,04"
313, "5653,16"
314, "5671,28"
315, "5689,4"
316, "5707,52"
317, "5725,64"
318, "5743,76"
319, "5761,88"
320, 5780
321, "5798,12"
322, "5816,24"
323, "5834,36"
324, "5852,48"
325, "5870,6"
326, "5888,72"
327, "5906,84"
328, "5924,96"
329, "5943,08"
330, "5961,2"
331, "5979,32"
332, "5997,44"
333, "6015,56"
334, "6033,68"
335, "6051,8"
336, "6069,92"
337, "6088,04"
338, "6106,16"
339, "6124,28"
340, "6142,4"
341, "6160,52"
342, "6178,64"
343, "6196,76"
344, "6214,88"
345, 6233
346, "6251,12"
347, "6269,24"
348, "6287,36"
349, "6305,48"
350, "6323,6"
351, "6341,72"
352, "6359,84"
353, "6377,96"
354, "6396,08"
355, "6414,2"
356, "6432,32"
357, "6450,44"
358, "6468,56"
359, "6486,68"
360, "6504,8"
361, "6522,92"
362, "6541,04"
363, "6559,16"
364, "6577,28"
365, "6595,4"
366, "6613,52"
367, "6631,64"
368, "6649,76"
369, "6667,88"
370, 6686
371, "6704,12"
372, "6722,24"
373, "6740,36"
374, "6758,48"
375, "6776,6"
376, "6794,72"
377, "6812,84"
378, "6830,96"
379, "6849,08"
380, "6867,2"
381, "6885,32"
382, "6903,44"
383, "6921,56"
384, "6939,68"
385, "6957,8"
386, "6975,92"
387, "6994,04"
388, "7012,16"
389, "7030,28"
390, "7048,4"
391, "7066,52"
392, "7084,64"
393, "7102,76"
394, "7120,88"
395, 7139
396, "7157,12"
397, "7175,24"
398, "7193,36"
399, "7211,48"
400, "7211,48"

];

div:
LOAD round(Count(idProduto)/2) as div Resident dados; vDiv = Peek('div'); DROP Table div;

NoConcatenate
dados2:
LOAD RecNo() as Seq, * Resident dados
order by ValorProduto desc;
DROP Table dados;

NoConcatenate
dados3:
LOAD * Resident dados2 where Seq <= $(vDiv);
DROP Table dados2;

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
rodrigohacke
Partner - Contributor II
Partner - Contributor II

Boa Tarde Guilherme,

Acredito que o resultado esperado seja conforme print abaixo certo? Se for,  segue abaixo script.

50% 1.JPG

Na carga é preciso ordenar os valores de forma decrescente.

 

tmp:
LOAD * INLINE [ 
Produto , Valor
	a	,	10
	b	,	20
	c	,	58
	d	,	70
	e	,	100
	f	,	90
	g	,	200
	h	,	80
	i	,	60
	j	,	70
	k	,	2
	l	,	5
];

VENDAS:
LOAD
	*,
    AutoNumber(Valor) 				as Ranking,
	NumSum(Valor,Peek('Acumulado')) 	as Acumulado
Resident tmp Order By Valor desc;
Drop Table tmp;

 

 

E na medida pode ser feito conforme abaixo:

 

Sum(If(Acumulado <= Sum(Total Valor) / 2, Acumulado, 0))

 

 

guilherme_atj
Contributor
Contributor
Author

Boa Tarde Danilo.

Obrigado pela ajuda mas desta forma nós teremos o valor total de 50% dos produtos que tem o maior valor certo?

Se sim, não da porque o valor de 50% ficara alto, imagina que eu tenho 1000 reais em vendas e preciso saber para quantos clientes diferentes eu vendi 500 reais e precisaria disto apenas como texto não precisa ser em gráfico ou tabela.

Se tiver em mente algo que possa me ajudar agradeço.

danilostochi
Creator II
Creator II

Entendi você quer fazer tipo curva ABC classificando somente o ponto A com 50%

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
guilherme_atj
Contributor
Contributor
Author

Exatamente, eu preciso apenas saber quantos clientes fazem parte do "A" (Contar) em um quadro de texto mesmo, eu tenho um quadro de texto aonde eu tenho a quantidade total de cliente com relação ao filtro selecionado e agora preciso mostrar o "A" de acordo com o filtro selecionado.

tem uma foto em anexo de como preciso representar.

guilherme_atj
Contributor
Contributor
Author

Boa tarde Rodrigo.

Obrigado pela ajuda, é quase isto que preciso....preciso apenas dizer quantos cliente compõem estes 50% (como no exemplo 2) em caixa de texto e que seja de acordo com os filtro selecionados.

exemplo de ilustração em anexo

obrigado.

 

 

rodrigohacke
Partner - Contributor II
Partner - Contributor II

Guilherme,
Nesse caso muda apenas a medida, onde vou somar 1 sempre que a condição for menor que 50% do total faturado.

Sum(If(Acumulado <= Sum(Total Valor) / 2, 1, 0))
danilostochi
Creator II
Creator II

https://community.qlik.com/t5/Qlik-Brasil/Curva-ABC-Quantidades-de-itens-na-curva-A-B-e-C-no-KPI/gpm...

veja esse link

+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
guilherme_atj
Contributor
Contributor
Author

Danilo.

Obrigado pelo link, me deu um norte mas ainda não consegui.

cheguei no abaixo para contar os produtos mas esta me trazendo o valor total de produtos:

=If( RangeSum(Above(Sum(Valor), 1, RowNo())) / Sum(total Valor)< 0.5, Count(distinct(Produto)))

consegue me ajudar?

Estou colocando isto em um objeto texto.