Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tudo que estiver relacionado a tratamento de dados, Power Query editor e linguagem M
Por Zodtept
Posts
#56320
Boa Tarde,

Estou com o seguinte problema: Dentro de meu relatório eu analiso a evolução e comportamento da base acionária da minha empresa. Semanalmente importo um arquivo em .csv com todas as informações dos atuais acionistas da empresa (Nome, CPF/CNPJ, Qtd. de ações detidas, Telefone, Endereço, Profissão, Dt de nascimento e etc.) e salvo numa pasta com o nome do arquivo sendo a Data que a base se refere (por exemplo, "22.06.2020.csv").

Qual estratégia eu adotei, eu mando importar a pasta para o Editor de consultas e de lá eu criei uma "Fato Base Acionária" aonde eu exclui todas as colunas que descrevem a pessoa e só mantive o CPF/CNPJ, a Qtd de Ações e Data.
Numa outra consulta eu fiz uma "Dimensão Acionistas" onde eu removo a data e a Qtd de ações e removo os CPF/CNPJs duplicados tendo assim uma base com O Nome, Endereço, Profissão e etc. de cada acionista e vinculo as tabelas pelo CPF/CNPJ que é a Chave Primária.

O problema ocorre que quando coloco um novo arquivo .csv na pasta e clico em atualizar o Power BI Desktop... Aparentemente carrega a pasta duas vezes. Uma para a Tabela "Fato Base Acionária" e outra para a Tabela "Dimensão Acionistas" o que leva muuuuuito tempo já que existem váaaaaarios dias e arquivos .csv na pasta...

Vocês conhecem alguma estratégia que de para eu otimizar as atualizações?

Infelizmente, por razões obvias, não posso disponibilizar os arquivos aqui, mas deixo abaixo o meu Editor Avaçado para vocês entenderem as loucuras que eu já fiz nas tabelas (Talvez ajude...)


"Tabela Fato"
Código: Selecionar todos
let
    Fonte = Folder.Files(#"Local Base Acionária"),
    #"Texto Inserido Antes do Delimitador" = Table.AddColumn(Fonte, "Texto Antes do Delimitador", each Text.BeforeDelimiter([Name], ".csv"), type text),
    #"Tipo Alterado2" = Table.TransformColumnTypes(#"Texto Inserido Antes do Delimitador",{{"Texto Antes do Delimitador", type datetime}}),
    #"Linhas Filtradas" = Table.SelectRows(#"Tipo Alterado2", each [Texto Antes do Delimitador] >= RangeStart and [Texto Antes do Delimitador] < RangeEnd),
    #"Linhas Classificadas" = Table.Sort(#"Linhas Filtradas",{{"Date accessed", Order.Descending}}),
    #"Arquivos Ocultos Filtrados1" = Table.SelectRows(#"Linhas Classificadas", each [Attributes]?[Hidden]? <> true),
    #"Invocar Função Personalizada1" = Table.AddColumn(#"Arquivos Ocultos Filtrados1", "Transformar Arquivo (2)", each #"Transformar Arquivo (2)"([Content])),
    #"Colunas Renomeadas1" = Table.RenameColumns(#"Invocar Função Personalizada1", {"Name", "Nome da Origem"}),
    #"Outras Colunas Removidas1" = Table.SelectColumns(#"Colunas Renomeadas1", {"Nome da Origem", "Transformar Arquivo (2)"}),
    Personalizar2 = #"Outras Colunas Removidas1",
    #"Personalização Adicionada" = Table.AddColumn(Personalizar2, "Tabela.limpa", each let
limpar = Table.RemoveFirstN([#"Transformar Arquivo (2)"],1),
cabecalho = Table.PromoteHeaders(limpar)
in
cabecalho),
    #"Colunas Removidas" = Table.RemoveColumns(#"Personalização Adicionada",{"Transformar Arquivo (2)"}),
    #"Tabela.limpa Expandido" = Table.ExpandTableColumn(#"Colunas Removidas", "Tabela.limpa", {"NOME ACIONISTA", "EO", "BAIRRO", "CIDADE", "ES", "CEP", "PAI", "P", "DT.NASC.", "S", "ATIVIDADE", "CPF/CNPJ"}, {"NOME ACIONISTA", "EO", "BAIRRO", "CIDADE", "ES", "CEP", "PAI", "P", "DT.NASC.", "S", "ATIVIDADE", "CPF/CNPJ"}),
    #"Primeiros caracteres extraídos" = Table.TransformColumns(#"Tabela.limpa Expandido", {{"Nome da Origem", each Text.Start(_, 10), type text}}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Primeiros caracteres extraídos",{{"Nome da Origem", "Data"}, {"NOME ACIONISTA", "Acionista"}, {"EO", "Ações"}, {"BAIRRO", "Bairro"}, {"CIDADE", "Cidade"}, {"ES", "Estado"}, {"PAI", "Pais"}, {"P", "Pessoa"}, {"DT.NASC.", "DataNascimento"}, {"S", "Sexo"}, {"ATIVIDADE", "Atividade"}}),
    #"Personalização Adicionada1" = Table.AddColumn(#"Colunas Renomeadas", "CNPJ/CPF", each if [Pessoa]="F" then Text.End([#"CPF/CNPJ"],11) else Text.End([#"CPF/CNPJ"],14)),
    #"Tipo Alterado1" = Table.TransformColumnTypes(#"Personalização Adicionada1",{{"CNPJ/CPF", type text}}),
    TabelaBufferizada = Table.Buffer(#"Tipo Alterado1"),
    #"Outras Colunas Removidas" = Table.SelectColumns(#"Tipo Alterado1",{"Data", "Ações", "CNPJ/CPF"}),
    #"Colunas Reordenadas" = Table.ReorderColumns(#"Outras Colunas Removidas",{"Data", "CNPJ/CPF", "Ações"}),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Colunas Reordenadas",{{"Data", type date}, {"CNPJ/CPF", type text}, {"Ações", Int64.Type}})
in
    #"Tipo Alterado"

"Tabela Dimensão"
Código: Selecionar todos
let
    Fonte = Folder.Files(#"Local Base Acionária"),
    #"Texto Inserido Antes do Delimitador" = Table.AddColumn(Fonte, "Texto Antes do Delimitador", each Text.BeforeDelimiter([Name], ".csv"), type text),
    #"Tipo Alterado4" = Table.TransformColumnTypes(#"Texto Inserido Antes do Delimitador",{{"Texto Antes do Delimitador", type datetime}}),
    #"Linhas Filtradas1" = Table.SelectRows(#"Tipo Alterado4", each [Texto Antes do Delimitador] >= RangeStart and [Texto Antes do Delimitador] < RangeEnd),
    #"Arquivos Ocultos Filtrados1" = Table.SelectRows(#"Linhas Filtradas1", each [Attributes]?[Hidden]? <> true),
    #"Invocar Função Personalizada1" = Table.AddColumn(#"Arquivos Ocultos Filtrados1", "Transformar Arquivo (2)", each #"Transformar Arquivo (2)"([Content])),
    #"Colunas Renomeadas1" = Table.RenameColumns(#"Invocar Função Personalizada1", {"Name", "Nome da Origem"}),
    #"Outras Colunas Removidas1" = Table.SelectColumns(#"Colunas Renomeadas1", {"Nome da Origem", "Transformar Arquivo (2)"}),
    #"Personalização Adicionada" = Table.AddColumn(#"Outras Colunas Removidas1", "Tabela.limpa", each let
limpar = Table.RemoveFirstN([#"Transformar Arquivo (2)"],1),
cabecalho = Table.PromoteHeaders(limpar)
in
cabecalho),
    #"Colunas Removidas" = Table.RemoveColumns(#"Personalização Adicionada",{"Transformar Arquivo (2)"}),
    #"Tabela.limpa Expandido" = Table.ExpandTableColumn(#"Colunas Removidas", "Tabela.limpa", {"NOME ACIONISTA", "EO", "BAIRRO", "CIDADE", "ES", "CEP", "PAI", "P", "DT.NASC.", "S", "ATIVIDADE", "CPF/CNPJ"}, {"NOME ACIONISTA", "EO", "BAIRRO", "CIDADE", "ES", "CEP", "PAI", "P", "DT.NASC.", "S", "ATIVIDADE", "CPF/CNPJ"}),
    #"Primeiros caracteres extraídos" = Table.TransformColumns(#"Tabela.limpa Expandido", {{"Nome da Origem", each Text.Start(_, 10), type text}}),
    #"Colunas Renomeadas" = Table.RenameColumns(#"Primeiros caracteres extraídos",{{"Nome da Origem", "Data"}, {"NOME ACIONISTA", "Acionista"}, {"EO", "Ações"}, {"BAIRRO", "Bairro"}, {"CIDADE", "Cidade"}, {"ES", "Estado"}, {"PAI", "Pais"}, {"P", "Pessoa"}, {"DT.NASC.", "DataNascimento"}, {"S", "Sexo"}, {"ATIVIDADE", "Atividade"}}),
    #"Personalização Adicionada4" = Table.AddColumn(#"Colunas Renomeadas", "CNPJ/CPF", each if [Pessoa]="F" then Text.End([#"CPF/CNPJ"],11) else Text.End([#"CPF/CNPJ"],14)),
    #"Coluna Mesclada Inserida" = Table.AddColumn(#"Personalização Adicionada4", "Localização", each Text.Combine({[Bairro], [Cidade], [Estado], [Pais]}, ", "), type text),
    #"Colunas Reordenadas" = Table.ReorderColumns(#"Coluna Mesclada Inserida",{"CNPJ/CPF", "Acionista", "Bairro", "Cidade", "Estado", "CEP", "Pais", "Pessoa", "DataNascimento", "Sexo", "Atividade", "Localização"}),
    #"Tipo Alterado" = Table.TransformColumnTypes(#"Colunas Reordenadas",{{"Data", type date}, {"CPF/CNPJ", type text}, {"Ações", Int64.Type}, {"Acionista", type text}, {"Bairro", type text}, {"Cidade", type text}, {"Estado", type text}, {"CEP", type text}, {"Pais", type text}, {"Pessoa", type text}, {"DataNascimento", type date}, {"Sexo", type text}, {"Atividade", type text}, {"Localização", type text}, {"CNPJ/CPF", type text}}),
    #"Colunas Removidas2" = Table.RemoveColumns(#"Tipo Alterado",{"CPF/CNPJ"}),
    #"Início do Mês Calculado" = Table.TransformColumns(#"Colunas Removidas2",{{"Data", Date.StartOfMonth, type date}}),
    #"Duplicatas Removidas1" = Table.Distinct(#"Início do Mês Calculado", {"Data", "CNPJ/CPF"}),
    #"Linhas Agrupadas" = Table.Group(#"Duplicatas Removidas1", {"CNPJ/CPF", "Acionista", "Bairro", "Cidade", "Estado", "CEP", "Pais", "Pessoa", "DataNascimento", "Sexo", "Atividade", "Localização"}, {{"Tabela", each _, type table [Data=date, #"CNPJ/CPF"=text, Ações=number, Acionista=text, Bairro=text, Cidade=text, Estado=text, CEP=text, Pais=text, Pessoa=text, DataNascimento=date, Sexo=text, Atividade=text, Localização=text]}}),
    #"Duplicatas Removidas" = Table.Distinct(#"Linhas Agrupadas", {"CNPJ/CPF"}),
    #"Personalização Adicionada1" = Table.AddColumn(#"Duplicatas Removidas", "Max. acoes", each Table.Max([Tabela],"Ações")),
    #"Max. acoes Expandido" = Table.ExpandRecordColumn(#"Personalização Adicionada1", "Max. acoes", {"Ações"}, {"Max. acoes.Ações"}),
    #"Personalização Adicionada2" = Table.AddColumn(#"Max. acoes Expandido", "Meses ativo", each let 
tabela = Table.Distinct([Tabela],"Data"),
contagem = Table.RowCount(tabela)
in
contagem),
    #"Personalização Adicionada3" = Table.AddColumn(#"Personalização Adicionada2", "Mês entrada", each let 
DataMin = Table.Min([Tabela],"Data")
in 
DataMin),
    #"Mês entrada Expandido" = Table.ExpandRecordColumn(#"Personalização Adicionada3", "Mês entrada", {"Data"}, {"Mês entrada.Data"}),
    #"Colunas Removidas1" = Table.RemoveColumns(#"Mês entrada Expandido",{"Tabela"}),
    #"Tipo Alterado1" = Table.TransformColumnTypes(#"Colunas Removidas1",{{"Max. acoes.Ações", Int64.Type}, {"Meses ativo", Int64.Type}, {"Mês entrada.Data", type date}}),
    #"Ano Extraído" = Table.TransformColumns(#"Tipo Alterado1",{{"DataNascimento", Date.Year, Int64.Type}}),
    #"Consultas Mescladas" = Table.NestedJoin(#"Ano Extraído", {"CNPJ/CPF"}, #"dPessoas Eztec", {"CNPJ/CPF"}, "dPessoas Eztec", JoinKind.LeftOuter),
    #"dPessoas Eztec Expandido" = Table.ExpandTableColumn(#"Consultas Mescladas", "dPessoas Eztec", {"Natureza", "Status"}, {"Natureza", "Status"}),
    #"Valor Substituído" = Table.ReplaceValue(#"dPessoas Eztec Expandido","FUNCIONÁRIO","Free-float",Replacer.ReplaceText,{"Natureza"}),
    #"Valor Substituído1" = Table.ReplaceValue(#"Valor Substituído",null,"Free-float",Replacer.ReplaceValue,{"Natureza"}),
    #"Valor Substituído2" = Table.ReplaceValue(#"Valor Substituído1","CONTROLADOR","Controladores e Pessoas Relacionadas",Replacer.ReplaceText,{"Natureza"}),
    #"Valor Substituído3" = Table.ReplaceValue(#"Valor Substituído2","PESSOA RELACIONADA","Controladores e Pessoas Relacionadas",Replacer.ReplaceText,{"Natureza"}),
    #"Colunas Renomeadas2" = Table.RenameColumns(#"Valor Substituído3",{{"Status", "Status Empresa"}}),
    #"Personalização Adicionada5" = Table.AddColumn(#"Colunas Renomeadas2", "Status Geral", each if [Natureza] = "Free-float" then 
 if [Pais] <> "BRA" then "Estrangeiro" else 
  if [Pessoa] = "J" then "Pessoa Jurídica" else "Pessoa Física"
  else 
  if [Status Empresa] <> "GRUPO CONTROLADOR" then "Pessoa Física" else "Grupo Controlador"),
    #"Tipo Alterado2" = Table.TransformColumnTypes(#"Personalização Adicionada5",{{"Status Geral", type text}}),
    #"Consultas Mescladas1" = Table.NestedJoin(#"Tipo Alterado2", {"CNPJ/CPF"}, #"dFundos Nacionais", {"CNPJ"}, "dFundos Nacionais", JoinKind.LeftOuter),
    #"dFundos Nacionais Expandido" = Table.ExpandTableColumn(#"Consultas Mescladas1", "dFundos Nacionais", {"PL mais recente", "Gestora"}, {"PL mais recente", "Gestora"}),
    #"Colunas Renomeadas3" = Table.RenameColumns(#"dFundos Nacionais Expandido",{{"Gestora", "Gestora Nacional"}, {"PL mais recente", "Patrim. Liq"}}),
    ADDGestorInternacional = Table.AddColumn(#"Colunas Renomeadas3", "Gestora Internacional", each if Text.Contains([Acionista], "ACADIAN") then "Acadian" else if Text.Contains([Acionista], "AEGON") then "Aegon" else if Text.Contains([Acionista], "ALASKA") then "Alaska" else if Text.Contains([Acionista], "ALLIANZ") then "Allianz" else if Text.Contains([Acionista], "ALPINE") then "Alpine" else if Text.Contains([Acionista], "AMUNDI") then "Amundi" else if Text.Contains([Acionista], "ARROWSTREET") then "Arrowstreet" else if Text.Contains([Acionista], "ASHMORE") then "Ashmore" else if Text.Contains([Acionista], "AVIVA") then "Aviva" else if Text.Contains([Acionista], "AXA") then "Axa" else if Text.Contains([Acionista], "BAHIA") then "Bahia" else if Text.Contains([Acionista], "BARTHE HOLDINGS ") then "Constellation" else if Text.Contains([Acionista], "BEST INVESTMENT CORPORATION") then "Itaú Unibanco" else if Text.Contains([Acionista], "BANCHILE") then "Banchile" else if Text.Contains([Acionista], "BANK OF AMERICA") then "Bank of america" else if Text.Contains([Acionista], "BLACKROCK") then "Blackrock" else if Text.Contains([Acionista], "BNP") then "BNP" else if Text.Contains([Acionista], "BNY") then "BNY" else if Text.Contains([Acionista], "BRADESCO") then "Bradesco" else if Text.Contains([Acionista], "CANADIAN") then "Canadian" else if Text.Contains([Acionista], "CCL ") then "CCL" else if Text.Contains([Acionista], "CELFIN") then "Celfin" else if Text.Contains([Acionista], "CHEVRON") then "Chevron" else if Text.Contains([Acionista], "CITI ") then "Citibank" else if Text.Contains([Acionista], "CITIBANK") then "Citibank" else if Text.Contains([Acionista], "CITIGROUP") then "Citibank" else if Text.Contains([Acionista], "COMMONWEALTH") then "Ccommonwealth" else if Text.Contains([Acionista], "COMPASS") then "Compass" else if Text.Contains([Acionista], "CONTRARIAN ") then "Contrarian" else if Text.Contains([Acionista], "CREDIT ") then "Credit suisse" else if Text.Contains([Acionista], "DANSKE") then "Danske" else if Text.Contains([Acionista], "DEKA") then "DEKA" else if Text.Contains([Acionista], "DELAWARE") then "Delaware" else if Text.Contains([Acionista], "DEUTSCHE") then "Deutsche" else if Text.Contains([Acionista], "DFA ") then "DFA" else if Text.Contains([Acionista], "DIMENSIONAL") then "Dimensional" else if Text.Contains([Acionista], "DRIEHAUS") then "Driehaus" else if Text.Contains([Acionista], "EQUITAS") then "Equitas" else if Text.Contains([Acionista], "EURIZON") then "Eurizon" else if Text.Contains([Acionista], "EUROAMERICA") then "Euroamerica" else if Text.Contains([Acionista], "FIDELITY") then "Fidelity" else if Text.Contains([Acionista], "CAISSE ") then "Constellation" else if Text.Contains([Acionista], "CHANG ") then "Chang Bank" else if Text.Contains([Acionista], "EBK-AKTIEN") then "JP Morgan" else if Text.Contains([Acionista], "DIMENS GR") then "Dimensional" else if Text.Contains([Acionista], "EMERGING MARKETS SUSTAINABILITY CORE 1 PORTFOLIO") then "Dimensional" else if Text.Contains([Acionista], "EMERGING MARKETS TARGETED VALUE PORTFOLIO") then "Dimensional" else if Text.Contains([Acionista], "EMG MKT SOCIAL CORE PORT OF DFA INVEST DIMENSIONS GROUP INC") then "Dimensional" else if Text.Contains([Acionista], "EUROAMERICA AM SICAV-SMALL CAP LATAM FUND") then "Itaú Unibanco" else if Text.Contains([Acionista], "FONDO DE INVERSION LATAM") then "Banchile" else if Text.Contains([Acionista], "FONDO DE INVERSION ITAU") then "Itaú Unibanco" else if Text.Contains([Acionista], "FONDO MUTUO ITAU") then "Itaú Unibanco" else if Text.Contains([Acionista], "FONDO MUTUO LARRAINVIAL") then "Larrainvial Asset" else if Text.Contains([Acionista], "FORD ") then "Ford Motor" else if Text.Contains([Acionista], "GAM ") then "GAM" else if Text.Contains([Acionista], "GAVIAO ") then "Gaviao" else if Text.Contains([Acionista], "GOLDMAN SACHS ") then "Goldman Sachs" else if Text.Contains([Acionista], "GOTHIC ") then "Gothic Corp" else if Text.Contains([Acionista], "HANOVER INVESTMENTS (LUXEMBOURG) S.A.") then "Constellation" else if Text.Contains([Acionista], "HSBC ") then "HSBC" else if Text.Contains([Acionista], "IBM ") then "IBM" else if Text.Contains([Acionista], "KAPITALANLAGEGESELLSCHAFT") then "KAPITALANLAGEGESELLSCHAFT" else if Text.Contains([Acionista], "INVESCO ") then "Invesco" else if Text.Contains([Acionista], "ISHARES ") then "BLACKROCK" else if Text.Contains([Acionista], "ITAU ") then "Itaú Unibanco" else if Text.Contains([Acionista], "J.P. MORGAN ") then "JP Morgan" else if Text.Contains([Acionista], "JPMORGAN ") then "JP Morgan" else if Text.Contains([Acionista], "JP MORGAN ") then "JP Morgan" else if Text.Contains([Acionista], "JAPAN TRUSTEE ") then "Franklin Templeton" else if Text.Contains([Acionista], "JOHN HANCOCK ") then "John Hancock" else if Text.Contains([Acionista], "KAISER ") then "Kaiser" else if Text.Contains([Acionista], "KAPITALO ") then "Kapitalo" else if Text.Contains([Acionista], "KOOKMIN ") then "Kookmin Bank" else if Text.Contains([Acionista], "KUWAIT INVESTMENT AUTHORITY") then "Itaú Unibanco" else if Text.Contains([Acionista], "LA HOLDINGS (LUXEMBOURG) SA") then "Itaú Unibanco" else if Text.Contains([Acionista], "LARRAINVIAL") then "Larrainvial Asset" else if Text.Contains([Acionista], "MERCER") then "Mercer Global" else if Text.Contains([Acionista], "MERRILL") then "Merrill Lynch" else if Text.Contains([Acionista], "SOMERSET") then "Somerset" else if Text.Contains([Acionista], "MIRAE") then "Mirae Asset" else if Text.Contains([Acionista], "MONEDA") then "Moneda" else if Text.Contains([Acionista], "SOMERSET") then "Somerset" else if Text.Contains([Acionista], "MORGAN STANLEY") then "JP MORGAN" else if Text.Contains([Acionista], "NORDEA 1, SICAV- NORDEA 1- LATIN AMERICAN EQUITY FUND") then "Itaú Unibanco" else if Text.Contains([Acionista], "NORDEA") then "Itaú Unibanco" else if Text.Contains([Acionista], "NORTHERN TRUST") then "Northern Trust" else if Text.Contains([Acionista], "NORDEA") then "Itaú Unibanco" else if Text.Contains([Acionista], "NTGI") then "NTGI" else if Text.Contains([Acionista], "OLD WESTBURY") then "Old Westbury" else if Text.Contains([Acionista], "OPTIMIX") then "Optimix" else if Text.Contains([Acionista], "PARAMETRIC") then "Parametric Investment" else if Text.Contains([Acionista], "BANK OF CHINA") then "Bank of China" else if Text.Contains([Acionista], "PICTET") then "PICTET" else if Text.Contains([Acionista], "PUB INSTITUTIONAL FUND UMBRELLA-PUB EQUITIES EMER MARKETS") then "Credit Suisse" else if Text.Contains([Acionista], "QUEENSLAND") then "QUEENSLAND" else if Text.Contains([Acionista], "RAM ") then "RAM" else if Text.Contains([Acionista], "REUSS (LUX) FCP RAIF-AMAZONAS") then "Constellation" else if Text.Contains([Acionista], "SANTANDER") then "Santender" else if Text.Contains([Acionista], "SCHRODER") then "Schroder" else if Text.Contains([Acionista], "SEI ") then "SEI Investments" else if Text.Contains([Acionista], "SHINHAN") then "BNP Paribas" else if Text.Contains([Acionista], "SOMERSET") then "Somerset" else if Text.Contains([Acionista], "SPDR ") then "State Street" else if Text.Contains([Acionista], "SSGA ") then "SSGA" else if Text.Contains([Acionista], "SPDR ") then "State Street" else if Text.Contains([Acionista], "STATE STREET ") then "State Street" else if Text.Contains([Acionista], "STICHTING ") then "Stichting" else if Text.Contains([Acionista], "STRATEGY ") then "Strategy" else if Text.Contains([Acionista], "SULAMERICA") then "Sulamerica" else if Text.Contains([Acionista], "SYMMETRY") then "Symmetry" else if Text.Contains([Acionista], "ROWE ") then "T. Rowe" else if Text.Contains([Acionista], "BOEING") then "Boeing Company" else if Text.Contains([Acionista], "THE DFA INV T CO ON BEH ITS S THE EM SLL CAPS") then "Dimensional" else if Text.Contains([Acionista], "THE MASTER T") then "Bank of Japan" else if Text.Contains([Acionista], "TYLER FINANCE LLC") then "Constellation" else if Text.Contains([Acionista], "UBS ") then "UBS" else if Text.Contains([Acionista], "ULLICO") then "Ullico" else if Text.Contains([Acionista], "UNIBANCO") then "Itaú Unibanco" else if Text.Contains([Acionista], "UNIVERSAL") then "Universal Investing" else if Text.Contains([Acionista], "VANGUARD") then "Vanguard" else if Text.Contains([Acionista], "VICTOIRE") then "Victoire" else if Text.Contains([Acionista], "VINSON") then "Vinson" else if Text.Contains([Acionista], "WELLINGTON ") then "Wellington" else if Text.Contains([Acionista], "WELLS FARGO") then "Wells Fargo" else if Text.Contains([Acionista], "WILLIAN BLAIR") then "Willian Blair" else if Text.Contains([Acionista], "WISDOMTREE") then "Wisdomtree" else if Text.Contains([Acionista], "WORD EX") then "Dimensional" else if Text.Contains([Acionista], "ABN ") then "ABN Amro" else if Text.Contains([Acionista], "Ac2 ") then "Ac2 Investimentos" else if Text.Contains([Acionista], "Ace ") then "Ace Capital" else if Text.Contains([Acionista], "Agrimisa ") then "Agrimisa" else if Text.Contains([Acionista], "Apex ") then "Apex capital" else if Text.Contains([Acionista], "Bahia ") then "Bahia" else if Text.Contains([Acionista], "Bamerindus ") then "Bamerindus" else if Text.Contains([Acionista], "Banco 1 ") then "Banco 1" else if Text.Contains([Acionista], "Bradesco ") then "Bradesco" else if Text.Contains([Acionista], "BTG ") then "BTG Pactual" else if Text.Contains([Acionista], "Citbank ") then "Citibank" else if Text.Contains([Acionista], "Safra ") then "Safra" else if Text.Contains([Acionista], "Morgan") then "JP Morgan" else if Text.Contains([Acionista], "Santander ") then "Santander" else if Text.Contains([Acionista], "Bancocidade ") then "Banco Cidade" else if Text.Contains([Acionista], "Bancorp ") then "Bancorp" else if Text.Contains([Acionista], "Bank of America ") then "Bank of America" else if Text.Contains([Acionista], "Banrisul ") then "Banrisul" else if Text.Contains([Acionista], "BB ") then "Banco do Brasil" else if Text.Contains([Acionista], "BB-") then "Banco do Brasil" else if Text.Contains([Acionista], "BBA ") then "Itaú Unibanco" else if Text.Contains([Acionista], "BCN ") then "BCN" else if Text.Contains([Acionista], "Bemge ") then "Bemge" else if Text.Contains([Acionista], "BMC ") then "BMC" else if Text.Contains([Acionista], "Boreal ") then "Boreal" else if Text.Contains([Acionista], "Boston ") then "Boston" else if Text.Contains([Acionista], "Bozano ") then "Bozano" else if Text.Contains([Acionista], "Cacique ") then "Cacique" else if Text.Contains([Acionista], "Ccf ") then "Ccf" else if Text.Contains([Acionista], "Chase ") then "Chase" else if Text.Contains([Acionista], "Citi") then "Citibank" else if Text.Contains([Acionista], "Constellation ") then "Constellation" else if Text.Contains([Acionista], "Credit Suisse") then "Credit Suisse" else if Text.Contains([Acionista], "Cx ") then "Caixa Econômica" else if Text.Contains([Acionista], "Cx. ") then "Caixa Econômica" else if Text.Contains([Acionista], "Deutsche ") then "Deutsche" else if Text.Contains([Acionista], "Daycoval") then "Daycoval" else if Text.Contains([Acionista], "Equitas ") then "Equitas" else if Text.Contains([Acionista], "Icatu ") then "Icatu" else if Text.Contains([Acionista], "Inter ") then "Inter" else if Text.Contains([Acionista], "Itau ") then "Itaú Unibanco" else if Text.Contains([Acionista], "jpmorgan") then "JP Morgan" else if Text.Contains([Acionista], "Kinea") then "Kinea" else if Text.Contains([Acionista], "Lloyds ") then "Lloyds" else if Text.Contains([Acionista], "Opportunity ") then "Opportunity" else if Text.Contains([Acionista], "Prumo ") then "Prumo Capital" else if Text.Contains([Acionista], "Sharp ") then "Sharp Capital" else if Text.Contains([Acionista], "Unibanco ") then "Itaú Unibanco" else if Text.Contains([Acionista], "Vinci ") then "Vinci Capital" else if Text.Contains([Acionista], "Votorantim ") then "Votorantim" else if Text.Contains([Acionista], "Xp ") then "XP Investimentos" else [Acionista]),
    #"Coluna Condicional Adicionada" = Table.AddColumn(ADDGestorInternacional, "Gestora Unificado", each if [Status Geral] = "Estrangeiro" then [Gestora Internacional] else if [Gestora Nacional] <> null then [Gestora Nacional] else if [Status Geral] = "Pessoa Jurídica" then [Acionista] else [Status Geral]),
    #"Tipo Alterado3" = Table.TransformColumnTypes(#"Coluna Condicional Adicionada",{{"Gestora Unificado", type text}, {"Gestora Internacional", type text}}),
    #"Duplicatas Removidas2" = Table.Distinct(#"Tipo Alterado3", {"CNPJ/CPF"})
in
    #"Duplicatas Removidas2"

Obrigado!
#56326
Tente usar a função Table.Buffer para deixar uma tabela na memória e depois referenciar a outra consulta baseado nela.
#56359
Obrigado mas eu já havia visto esse vídeo e estou sem entender como ele poderia me ajudar... O ponto onde não consigo traçar o paralelo é o de que no caso do vídeo ele bufferiza uma fonte e com isso ela não é carregada em cada uma das interações dos cálculos de linhas... Ao meu ver o meu caso é um tanto diferente e por isso talvez não esteja conseguindo fazer o paralelo. Vou tentar deixar claro os pontos em que vejo divergência do cenário apresentado pelo vídeo:

1- No meu problema a fonte não é "lida" em loop em nenhum dos cálculos de linha. Ela é apenas lida uma unica vez, na hora de carregar as consultas. O problema é que ela é lida 1 vez para cada uma das consultas que a utiliza (a base facto e a base dim), são 2 consultas que utilizam essa mesma fonte de dados gigante.

2- Mesmo que eu bufferize a pasta em que estão os arquivos em .csv em cada um dos Editores Avançados das consultas ela ainda vai carregar a chegada dos dados (ao menos uma unica vez) em cada uma das leituras (ou seja, vou carregar os mesmos vários Gigas de dados tanto para a Facto e para a Dim).

3- Um experimento que tentei abordar foi o de criar uma Consulta com pasta que contem os arquivos .csv, desmarcar o "Habilitar Carga" e buferrizar ela ao final dos passos de "arrumação". Depois fui alterar a fonte das minhas Facto e Dim apontando para essa consulta bufferizada. O que ocorreu é que agora ao Atualizar os Dados as consultas ficaram com um "Avaliando" eternamente...

Estou enxergando errado algum desses pontos? Poderia me ajudar a entender como aplicar o conceito do vídeo para esse cenário?
#56366
Você precisa verificar até que ponto as consultas são iguais entre si. Então você irá "bufferizar" a tabela neste ponto. A partir de então, as consultas fato e dimensão farão referência a esta tabela "bufferizada".
Sendo assim, só haverá a leitura da fonte de dados uma única vez.
Outra forma, é você deixar duas pastas, uma com dados antigos e outra com dados novos. A consulta dos dados antigos você dirá ao PowerBI para desabilitar o carregamento de dados, carregando somente os dados novos. Aí, usando DAX, você usará a função UNION para juntar estas duas consultas em uma só, gerando uma tabela com todos os dados.
Veja se este vídeo dos Planilheiros te ajuda:
https://www.youtube.com/watch?v=eghNUjII26M&t=617s
Por Zodtept
Posts
#56371
@babdallas esse foi a estratégia que adotei no tópico 3- da minha resposta anterior :( como citei ao fazer isso ele, ao "Atualizar as Consultas" no Power BI aparece um "Atualizando" interminável...

Essa estratégia das pastas antigas com as novas pode funcionar... vou tentar...
#56471
Deu certo a estratégia de unir a pasta antiga com a pasta atual usando DAX?
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord