AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1788724
Accepted
dav
dav
Asked: 2023-06-13 04:48:54 +0800 CST2023-06-13 04:48:54 +0800 CST 2023-06-13 04:48:54 +0800 CST

Crie uma tabela contábil de dupla entrada separando as transações

  • 772

Eu tenho uma tabela do Excel com transações contábeis que são armazenadas em uma única linha:

Data Para conta Da conta Quantia Tipo
01/06/2023 2192 2281 $ 100,00 Transferir

Estou tentando converter essa única linha em transações de entrada dupla como esta:

Data Para conta Da conta Quantia Tipo
01/06/2023 2192 $-100,00 Despesa
01/06/2023 2281 $ 100,00 Receita

Tenho milhares de entradas e precisarei atualizá-las regularmente (várias vezes por mês), por isso estou procurando uma maneira sistemática de repetir o processo. A única solução que encontrei, até agora, é copiar os registros e usar colunas auxiliares para particionar os dados com base no fato de a linha ser a original ou a cópia. Estou aberto a uma solução Excel, Power Query, SSIS ou SQL (os dados acabarão em um banco de dados SQL Server). Eu gostaria de evitar o VBA.

microsoft-excel
  • 2 2 respostas
  • 64 Views

2 respostas

  • Voted
  1. AdamV
    2023-06-13T06:12:12+08:002023-06-13T06:12:12+08:00

    O Power Query fará isso com bastante facilidade. Coloque seus dados em uma tabela para usar como fonte ou talvez use uma fonte de dados externa, como CSV ou SQL.

    No entanto, você obtém os dados em PQ em um formato semelhante ao seu post, então você quer certificar-se de que a etapa Changed Type está definindo tipos de dados adequados para cada coluna. Remova a coluna "Tipo" que você não precisa.

    Achei útil renomear "Valor" para "Valor original" neste ponto, para que eu possa reutilizar o nome da coluna posteriormente. Selecione Valor e data originais e vá para Transformar > Colunas não dinâmicas > Outras colunas.

    Este é o passo crucial para obter duas linhas onde havia apenas uma. Depois disso, você precisa adicionar várias colunas condicionais para obter os valores "Para a conta" em uma coluna chamada "Para a conta" e nulos para as outras e vice-versa para "Da conta".

    A nova coluna "Valor" é um pouco mais complicada. Você pode executar várias etapas e excluir as colunas intermediárias ou escrever uma fórmula personalizada do zero ou em algum lugar intermediário - adicione uma coluna condicional que procure por To / From e, em AMBOS os casos, retorne a coluna Valor. Em seguida, na barra de fórmulas, basta editar a metade disso inserindo "-1 *" na frente de [Valor original].

    Da mesma forma, adicione uma coluna condicional para Tipo (Receita ou Despesa)

    Altere a coluna Valor para o tipo de dados Moeda (ou decimal, se preferir, mas decimais fixos geralmente são úteis). Remova as colunas indesejadas para manter apenas as colunas necessárias (portanto, livre-se de Valor, Atributo e Valor Original).

    Feche e carregue - bom para ir! Seu código M (no Editor Avançado) ficará mais ou menos assim:

    let
            Source = Excel.CurrentWorkbook(){[Name="StartingTable"]}[Content],
            #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"To Account", type text}, {"From Account", type text}, {"Amount", Int64.Type}, {"Type", type text}}),
            #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Type"}),
            #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Amount", "Original Amount"}}),
            #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Renamed Columns", {"Original Amount", "Date"}, "Attribute", "Value"),
            #"Added To Account" = Table.AddColumn(#"Unpivoted Other Columns", "To Account", each if [Attribute] = "To Account" then [Value] else null),
            #"Added From Account" = Table.AddColumn(#"Added To Account", "From Account", each if [Attribute] = "From Account" then [Value] else null),
            #"Added Amount" = Table.AddColumn(#"Added From Account", "Amount", each if [Attribute] = "To Account" then [Original Amount] else -1 * [Original Amount]),
            #"Changed Type1" = Table.TransformColumnTypes(#"Added Amount",{{"Amount", Currency.Type}}),
            #"Added Conditional Column" = Table.AddColumn(#"Changed Type1", "Type", each if [Attribute] = "To Account" then "Expense" else "Revenue"),
            #"Removed Other Columns" = Table.SelectColumns(#"Added Conditional Column",{"Date", "To Account", "From Account", "Amount", "Type"})
        in
            #"Removed Other Columns" 
    
    • 1
  2. Best Answer
    Ron Rosenfeld
    2023-06-14T02:23:41+08:002023-06-14T02:23:41+08:00

    Aqui está outro método usando o Power Query:

    • Adicionar uma coluna de índice à tabela original
    • Crie duas tabelas a partir da tabela original
      • "Créditos"
        • Transforme a entrada "Da conta" em nula
        • Torne negativo o "Valor"
        • Faça o "Tipo": Despesa
      • "Débitos"
        • Transforme a entrada "Para a conta" em nula
        • Faça o "Tipo": Receita
    • Então
      • Recombinar as duas tabelas
      • Classificar pela coluna Índice
      • Excluir a coluna Índice

    Também seria possível incluir a tomada de decisão com base no número da conta para decidir sobre o Tipo e se o Valor deve ser negativo ou não.

    let
    
    //Change next line to reflect actual data source
        Source = Excel.CurrentWorkbook(){[Name="Transactions"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{
            {"Date", type date}, {"To Account", Int64.Type}, {"From Account", Int64.Type}, 
            {"Amount", Currency.Type}, {"Type", type text}}),
    
        #"Add Index Column" = Table.AddIndexColumn(#"Changed Type","Index"),
    
        Credits = Table.TransformColumns(#"Add Index Column",{
            {"From Account", each null, Int64.Type},
            {"Amount", each -_, Currency.Type},
            {"Type", each "Expense", type text}}),
    
        Debits = Table.TransformColumns(#"Add Index Column",{
            {"To Account", each null, Int64.Type},
            {"Type", each "Revenue", type text}}),
    
        Results = Table.Combine({Credits,Debits}),
        #"Sorted Rows" = Table.Sort(Results,{{"Index", Order.Ascending}}),
        #"Remove Index Column" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
     
    in
        #"Remove Index Column"
    

    insira a descrição da imagem aqui

    • 1

relate perguntas

  • Excel Pivot com operador "e"

  • Como usar a função LENGTH do Excel para uma coluna inteira?

  • Matriz do Excel (2 variáveis)

  • como abrir um arquivo de escritório do WSL

  • VBA para renomear planilha com base no nome do arquivo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve