Contagem de valores de ações "0" gerados pela tabela dinâmica

4

Eu tenho um livro de registros de inventário. Parece assim:

Tran Type         Txn Date     Item     Quantity
Opening Balance   6/30/12      Item1     4
Opening Balance   6/30/12      Item2     7
Shipping          7/14/12      Item2    -1
Opening Balance   6/30/12      Item3     3
Shipping          7/2/12       Item3    -1
Opening Balance   6/30/12      Item4     5
Shipping          7/3/12       Item4    -1
Shipping          7/3/12       Item4    -1
Shipping          7/3/12       Item4    -1
Shipping          7/5/12       Item4    -1
Shipping          7/5/12       Item4    -1
Receiving         7/9/12       Item4    10

O ledger, obviamente, apenas marca cada transação em um determinado período: saldo de abertura, expedição, recebimento e devolução.

Eu uso esse livro de registros de inventário para formar uma tabela dinâmica, que se parece com isso:

Sum of Quantity     Column Labels
Row Labels          6/30/12     7/2/12     7/3/12     7/5/12     7/6/12     7/9/12
Item1                 4           4           4          4          4          4
Item2                 7           7           7          7          7          7
Item3                 3           2           2          2          2          2
Item4                 5           5           2          0          0         10

A função da tabela dinâmica é manter um total em execução dos níveis de estoque para cada item individual, por dia.O formato de tabela dinâmica é útil porque mantém esses totais para cada dia em que o nosso depósito processou transações para QUALQUER item , ao contrário dos dados de origem, que apenas listam as datas das transações como elas aconteceram para aquele item em particular.

Usando esse total de dados em execução na tabela dinâmica, gostaria de acompanhar os dias em que o estoque estava com a quantidade 0 para cada item. Aqui está a parte complicada: gostaria de manter essa contagem como parte da tabela dinâmica, para que a contagem fosse dinâmica quando eu agrupar os dados por mês / trimestre / ano (para que possamos ver o total de dias fora de estoque por item para cada período).

Se eu puder fazer algo com os dados de base que me permitirão ter essa informação de esgotado, isso é ótimo. Se eu puder fazer isso diretamente na tabela dinâmica, melhor ainda.

Outra solução mais direta no céu me permitiria também gerar dados por dias consecutivos esgotados quando um item chegar a zero e, em seguida, ver as médias para isso por período de tempo na tabela dinâmica. Eu sei que a maior parte disso tem que ser feita nos dados de origem, e eu até sei como isso precisa ser feito, mas não consigo juntar tudo em uma fórmula. Primeiro, classifiquei os dados por Data em vez de por Nome do item. Eu criei uma nova coluna para manter a execução de totais de estoque ("Running Total" é o nome da coluna). Quando o total em execução chegar a zero, preciso encontrar a próxima linha em que a data é posterior à transação atual, onde o nome do item é o mesmo e onde o tipo de transação está "recebendo". De lá, precisaria encontrar a diferença entre as datas da transação. Alguém por favor pode me ajudar a criar uma fórmula para isso também?

Por último, como nossos dados contêm apenas os dias em que o warehouse processou transações, estou pensando em saber se há uma maneira de exibir as datas ausentes (ou seja, finais de semana e feriados) exibidas na tabela dinâmica também? Isso não é importante, mas impressionaria o alto escalão.

EDITAR: Depois de ver muitas das respostas aqui, eu abri para tentar resolver este problema através do Access ou SQL Server, e eu repostou a questão em StackOverflow com foco em usando consultas e colunas calculadas para descobrir isso.

Dito isto, eu ainda estou muito aberto para resolver isso através do excel, se alguém tiver mais alguma ideia! Como posso obter os totais em execução nos meus dados de origem, estou imaginando se posso fazer o Esgotado com instruções if em uma nova coluna.

Se o total em execução for Zero, preciso localizar a transação seguinte para o mesmo item, em que o tipo de transação é "Recebendo" e, em seguida, retornar a data da próxima transação para a coluna. Não sei como combinar todos esses elementos em uma fórmula, no entanto. Depois que eu retornar a data da próxima transação de Recebimento, eu poderia subtrair a Data de Txn da linha Atual pela diferença em dias.

Ficaria assim:

Tran Type         Txn Date     Item     Quantity  Stock   Out of Stock
Opening Balance   6/30/12      Item4     5          5
Shipping          7/3/12       Item4    -1          4
Shipping          7/3/12       Item4    -1          3
Shipping          7/3/12       Item4    -1          2
Shipping          7/5/12       Item4    -1          1
Shipping          7/5/12       Item4    -1          0         4 Days
Receiving         7/9/12       Item4    10         10

De lá, eu poderia fazer outra tabela dinâmica com totais por item, ou algo assim.

    
por Matt 16.07.2012 / 16:22

2 respostas

2

Eu acho que (ou a maior parte disso?) pode ser feito no Excel sem o VBA, mas tentando explicar como é outra questão.

  1. Ele ajuda a identificar saldos de abertura por item para adicionar a coluna A ao seu livro de inventário (chamado de Sheet1 daqui em diante) e colocar =B2&D2 em A2 (assume que o tipo de tran estava em A1 ).

  2. Não pretenda interferir na Folha1, por isso, em Sheet2!ColumnB coloque uma instância de cada item (Dados > Avançado > Intervalo da lista > =$D2:$D[last occupied row] > Copiar para outra localização > Copiar para: [within Sheet1] > Apenas registros exclusivos e, em seguida, copie a lista resultante)

  3. Preencha os saldos de 6/30/12 em Sheet2!ColumnC ["manualmente" é provavelmente mais fácil se você copiar da Folha1 após a classificação por Item no tipo de transferência]

  4. Coloque 6/30/12 (se você precisar usar essa notação!) em Sheet2!C1 e =1+C1 em Sheet2!D1 .

  5. Coloque =AND(D1>=$A2,D1<=$B2) em Sheet2!D2 [para usar com a contagem de faltas de estoque dentro de um intervalo de tempo].

  6. Coloque a data de início para a contagem de faltas de estoque em A2 e a data de término em B2 .

  7. Coloque =IF(VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$C,3,FALSE)>D$1,"",IF(VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$C,3,FALSE)=D$1,VLOOKUP("Opening Balance"&$B4,Sheet1!$A:$E,5,FALSE),C4+SUMIFS(Sheet1!$E:$E,Sheet1!$C:$C,Sheet1!K$2,Sheet1!$D:$D,$B4)))’ em Sheet2!D4 e copie para todos os itens.

  8. Copie Sheet2!ColumnD até onde for necessário [sugiro não mais que +1 ano!) e anote a última coluna [aqui suposta ser Q].

  9. Em Sheet2!A4 put =COUNTIFS(C4:Q4,0,C$2:Q$2,"=TRUE") e copie para todos os itens.

  10. Se os seus itens realmente forem nomeados como no exemplo, você pode configurar mais do que você acha que precisará para o período escolhido, mas, caso contrário, teria que ficar atento a novos itens.

  11. Após o período escolhido, transfira os valores mais recentes como "Saldos iniciais" em uma nova planilha.

  12. Tente qualquer alternativa!

por 17.07.2012 / 23:35
0

Eu não consegui todos os seus pontos, mas vamos começar com o último, que eu acho que tenho uma boa solução para você. Talvez possamos construir a partir daí.

Então eu usei alguns ingredientes para chegar a esta mesa:

Tran Type   Txn Date    Item    Quantity    Stock   Outstock day    Restock day Days without stock
Receiving   03.06.2012  Item4   5           5           
Receiving   30.06.2012  Item1   4           4           
Shipping    02.07.2012  Item3   -1          -1          
Shipping    03.07.2012  Item4   -1          4           
Shipping    03.07.2012  Item4   -1          3           
Shipping    03.07.2012  Item4   -1          2           
Shipping    03.07.2012  Item4   -1          1           
Shipping    03.07.2012  Item4   -1          0       03.07.2012     03.08.2012      31
Receiving   09.07.2012  Item3   10          9           
Shipping    14.07.2012  Item2   -1          -1          
Receiving   01.08.2012  Item2   7           6           
Receiving   02.08.2012  Item3   3           12          
Receiving   03.08.2012  Item4   5           5           
Receiving   09.08.2012  Item4   10          15          
Receiving   10.08.2012  Item5   11          11          
Receiving   11.08.2012  Item6   12          12          
Receiving   12.08.2012  Item4   13          28          
Receiving   13.08.2012  Item8   14          14          

Stock

C2 = SUMIF($C$1:$C2,$C2,$D$1:D2)

- > Isso lhe dará um estoque de corrida desde o início, sem especificar um ponto de partida.

Outstock day

F2 = IF(E2=0,B2,"")'

Dia de reabertura

G2 = IF(E2=0,=INDEX($B:$B,MATCH($C2,OFFSET($C:$C,ZEILE($C2),0,ROWS($C:$C)-ROW($C2),1),0)+ROW($C2)),"")'

- > isso funciona, se você classificar seus dados por data e quando não houver remessas feitas para um item, depois dele ficar fora de estoque

Dias sem estoque

H2 = IF(E2=0,G2-F2,"")

- > aqui você pode querer observar, subtraindo datas nem sempre podem resultar na contagem correta, mas isso é outro problema.

A principal mágica é a função offset combinada com match . Ao compensar a correspondência de intervalo em que está trabalhando, você exclui todos os dados antes da linha em que está agora. A correspondência procura a primeira ocorrência do item atual.

Eu estava trabalhando em uma maneira de resolver isso com este formular, mas tive problemas para ajustá-lo, para obter apenas a primeira data para o item atual - e não para qualquer item.

VLOOKUP("Receiving",OFFSET(A:C,ROW(C2)-1,0,ROWS(C:C)-ROW(C2)-1,3),2,FALSE)

Espero que isso ajude você ou outro, estou feliz em estender isso ...

    
por 20.09.2012 / 14:22