Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Novo Dashboard do Instagram #35

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

Bru-Silveira
Copy link

@Bru-Silveira Bru-Silveira commented Jan 8, 2025

Conforme solicitado nas Issues:

SouJunior/dashboard-midias#37

SouJunior/dashboard-midias#39

Summary by CodeRabbit

  • Novas Funcionalidades

    • Criação de um novo dashboard do Power BI para análise de métricas do Instagram.
    • Adição de visualizações detalhadas de seguidores, alcance, publicações e dados demográficos.
    • Implementação de tabelas dinâmicas com informações sobre cidades, países e páginas principais.
    • Inclusão de novos temas e configurações de layout para melhor experiência visual.
    • Novas tabelas e colunas para dados de publicações, seguidores e visitas.
    • Adição de medidas para análise de variação de seguidores e métricas de engajamento.
  • Melhorias

    • Configuração de temas personalizados para melhor experiência visual.
    • Adição de hierarquias de data para análises temporais mais precisas.
    • Suporte para idioma português brasileiro.
    • Melhoria na estrutura e organização das tabelas para facilitar a análise de dados.
  • Correções de Bugs

    • Otimização de importação e transformação de dados.
    • Configuração de relacionamentos entre tabelas para análise consistente.

Copy link

coderabbitai bot commented Jan 8, 2025

"""

Walkthrough

O pull request introduz uma configuração abrangente para um dashboard do Power BI focado em análises do Instagram. A implementação inclui múltiplos arquivos de configuração que definem a estrutura, temas, relacionamentos de dados, tabelas semânticas e layout do dashboard. Os novos arquivos estabelecem configurações para relatórios, modelos semânticos, recursos de data, métricas de seguidores, publicações e alcance, utilizando uma abordagem detalhada para visualização e análise de dados do Instagram.

Changes

Caminho Resumo das Alterações
powerbi/Dashboard_Instagram.Report/.pbi/localSettings.json Novo arquivo de configurações com versão "1.0" e assinatura de ligação de segurança
powerbi/Dashboard_Instagram.Report/.platform/platformProperties.json Novo arquivo de propriedades da plataforma para integração com Microsoft Fabric
powerbi/Dashboard_Instagram.Report/StaticResources/SharedResources/BaseThemes/CY24SU10.json Novo tema com 40 cores de dados, estilos de texto e configurações visuais para gráficos
powerbi/Dashboard_Instagram.Report/definition.pbir Novo arquivo de definição de relatório com referência a conjunto de dados
powerbi/Dashboard_Instagram.Report/report.json Configuração detalhada do dashboard, incluindo seções, filtros e visualizações
powerbi/Dashboard_Instagram.SemanticModel/.pbi/editorSettings.json Novo arquivo de configurações para o modelo semântico com versão "1.0"
powerbi/Dashboard_Instagram.SemanticModel/.pbi/localSettings.json Novo arquivo de configurações com versão "1.1", consentimento do usuário e assinatura de segurança
powerbi/Dashboard_Instagram.SemanticModel/.platform/platformProperties.json Novo arquivo de propriedades da plataforma para o modelo semântico
powerbi/Dashboard_Instagram.SemanticModel/definition.pbism Novo arquivo de definição com versão "4.0" e objeto de configurações vazio
powerbi/Dashboard_Instagram.SemanticModel/definition/cultures/pt-BR.tmdl Nova definição de cultura para português brasileiro
powerbi/Dashboard_Instagram.SemanticModel/definition/database.tmdl Nova definição de banco de dados com nível de compatibilidade "1567"
powerbi/Dashboard_Instagram.SemanticModel/definition/model.tmdl Nova definição de modelo com referências a várias tabelas e anotações
powerbi/Dashboard_Instagram.SemanticModel/definition/relationships.tmdl Novos relacionamentos definidos entre colunas de dados
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/... Várias novas tabelas adicionadas com colunas e partições para métricas de Instagram

Poem

🐰 No reino dos dados de Instagram
Um dashboard salta com vigor
Métricas dançam, gráficos brilham
Coelho analítico cheio de amor
Seguidores contados com precisão! 📊🥕
"""

✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

♻️ Duplicate comments (2)
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fVisitas.tmdl (1)

28-28: ⚠️ Potential issue

Evite caminhos absolutos no código fonte

Similar ao problema anterior, o caminho do arquivo CSV está hardcoded.

powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fPrincipaisPaises.tmdl (1)

68-68: ⚠️ Potential issue

Evite caminhos absolutos no código fonte

O mesmo problema de caminho absoluto se repete neste arquivo.

🧹 Nitpick comments (10)
powerbi/Dashboard_Instagram.SemanticModel/definition/cultures/pt-BR.tmdl (1)

3-9: Padronização necessária na indentação

A indentação está inconsistente ao longo do arquivo:

  • Linha 3: 1 tab
  • Linha 4: 3 tabs
  • Linha 8: 2 tabs

Sugiro padronizar a indentação em todo o arquivo para melhorar a legibilidade.

 cultureInfo pt-BR

-	linguisticMetadata =
-			{
-			  "Version": "1.0.0",
-			  "Language": "en-US"
-			}
-		contentType: json
+    linguisticMetadata =
+    {
+        "Version": "1.0.0",
+        "Language": "en-US"
+    }
+    contentType: json
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/DateTableTemplate_e73164e2-2dad-4449-9faa-6e0ff8ab3d97.tmdl (1)

1-113: Padronize o idioma das nomenclaturas

Existe uma mistura de termos em português e inglês no modelo:

  • Date, MonthNo, QuarterNo (inglês)
  • Ano, Mês, Trimestre (português)

Sugiro padronizar todos os nomes em português, já que esta parece ser a língua principal do dashboard.

powerbi/Dashboard_Instagram.SemanticModel/definition/tables/LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.tmdl (2)

1-4: Considere traduzir os nomes das colunas para português

A tabela está corretamente configurada como oculta, mas para manter a consistência com o idioma do dashboard, considere traduzir os nomes das colunas para português.


85-104: Considere traduzir o nome da hierarquia

A hierarquia está bem estruturada, mas para melhor usabilidade, considere traduzir 'Hierarquia de datas' para um nome mais específico como 'Calendário' ou 'Período'.

powerbi/Dashboard_Instagram.SemanticModel/definition/tables/dCalendario.tmdl (1)

20-62: Padronize a nomenclatura das colunas

Para manter consistência, sugiro padronizar os nomes das colunas:

  • 'ano' -> 'Ano'
  • 'mes' -> 'Mes'
  • 'nome_mes' -> 'NomeMes'
  • 'mes_ano' -> 'MesAno'
  • 'indice_mes_ano' -> 'IndiceMesAno'
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fSeguidores.tmdl (2)

167-172: Simplificar a lógica de remoção de linhas alternadas

A sequência de chamadas Table.AlternateRows pode ser simplificada para melhorar a manutenibilidade e performance.

Sugestão: Considere usar uma única expressão de filtro mais direta ou uma lógica de índice para selecionar as linhas desejadas.


4-15: Medida 'Seguidores Atuais' pode ser otimizada

A medida atual usa FILTER que pode impactar a performance em grandes conjuntos de dados.

Sugestão de otimização:

-measure 'Seguidores Atuais' = 
-    CALCULATE(
-        SUM(fSeguidores[Seguidores]),
-        FILTER(
-            fSeguidores,
-            fSeguidores[Data] <= MAX(fSeguidores[Data])
-        )
-    )
+measure 'Seguidores Atuais' = 
+    CALCULATE(
+        SUM(fSeguidores[Seguidores]),
+        LASTDATE(fSeguidores[Data])
+    )
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fDadosPublicacao.tmdl (1)

192-195: Padronização de valores pode ser otimizada

A sequência de substituições de texto pode ser simplificada usando uma tabela de mapeamento.

Sugestão: Considere criar uma tabela de mapeamento para as substituições de texto, tornando mais fácil manter e atualizar os valores.

powerbi/Dashboard_Instagram.Report/report.json (2)

48-159: Considerar ajustes no layout para melhor responsividade

A seção "Seguidores e Curtidas" tem dimensões fixas que podem não se adaptar bem a diferentes tamanhos de tela.

Sugestão: Considere usar porcentagens ou unidades relativas para dimensões e posicionamento dos elementos visuais para melhor adaptação a diferentes resoluções.


160-287: Considerar agrupamento de elementos visuais relacionados

A seção "Engajamento" contém vários elementos visuais que poderiam ser agrupados logicamente para melhor organização.

Sugestão: Utilize grupos para organizar elementos visuais relacionados, facilitando a manutenção e melhorando a experiência do usuário.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a976cf6 and fa93b81.

⛔ Files ignored due to path filters (2)
  • powerbi/Dashboard_Instagram.Report/StaticResources/RegisteredResources/Logomarca09030476236848517.png is excluded by !**/*.png
  • powerbi/Dashboard_Instagram.Report/StaticResources/RegisteredResources/Logomarca15091554199989954.png is excluded by !**/*.png
📒 Files selected for processing (26)
  • powerbi/Dashboard_Instagram.Report/.pbi/localSettings.json (1 hunks)
  • powerbi/Dashboard_Instagram.Report/.platform (1 hunks)
  • powerbi/Dashboard_Instagram.Report/StaticResources/SharedResources/BaseThemes/CY24SU10.json (1 hunks)
  • powerbi/Dashboard_Instagram.Report/definition.pbir (1 hunks)
  • powerbi/Dashboard_Instagram.Report/report.json (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/.pbi/editorSettings.json (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/.pbi/localSettings.json (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/.platform (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition.pbism (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/cultures/pt-BR.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/database.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/model.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/relationships.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/DateTableTemplate_e73164e2-2dad-4449-9faa-6e0ff8ab3d97.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/dCalendario.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fAlcance.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fDadosPublicacao.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fFaixaEtaria.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fPrincipaisCidades.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fPrincipaisPaginas.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fPrincipaisPaises.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fSeguidores.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fVisitas.tmdl (1 hunks)
  • powerbi/Dashboard_Instagram.SemanticModel/diagramLayout.json (1 hunks)
  • powerbi/Dashboard_Instagram.pbip (1 hunks)
✅ Files skipped from review due to trivial changes (9)
  • powerbi/Dashboard_Instagram.SemanticModel/definition.pbism
  • powerbi/Dashboard_Instagram.SemanticModel/definition/database.tmdl
  • powerbi/Dashboard_Instagram.SemanticModel/.pbi/editorSettings.json
  • powerbi/Dashboard_Instagram.SemanticModel/diagramLayout.json
  • powerbi/Dashboard_Instagram.Report/.platform
  • powerbi/Dashboard_Instagram.Report/.pbi/localSettings.json
  • powerbi/Dashboard_Instagram.SemanticModel/.platform
  • powerbi/Dashboard_Instagram.SemanticModel/.pbi/localSettings.json
  • powerbi/Dashboard_Instagram.pbip
🔇 Additional comments (7)
powerbi/Dashboard_Instagram.SemanticModel/definition/cultures/pt-BR.tmdl (1)

1-1: Inconsistência entre a cultura e o idioma dos metadados linguísticos

A cultura está definida como pt-BR, mas o idioma nos metadados linguísticos está configurado como en-US. Isso pode causar problemas de localização no dashboard.

Sugiro verificar se esta configuração está correta ou se o idioma dos metadados linguísticos também deveria ser pt-BR.

Also applies to: 5-7

powerbi/Dashboard_Instagram.Report/definition.pbir (1)

1-9: Configuração do relatório está correta!

A estrutura do arquivo está adequada, com a referência correta ao modelo semântico e a versão apropriada do Power BI.

powerbi/Dashboard_Instagram.SemanticModel/definition/relationships.tmdl (1)

6-24: Verificar integridade referencial

As relações entre as tabelas fato e a dimensão de calendário estão estruturalmente corretas, mas é importante garantir a integridade dos dados.

Execute o script abaixo para verificar se existem datas nas tabelas fato que não existem na tabela de calendário:

✅ Verification successful

Integridade referencial validada com sucesso

A análise do código fonte confirma que a integridade referencial das datas está adequadamente implementada:

  • A dimensão de calendário (dCalendario) é gerada automaticamente com base no intervalo de datas dos dados
  • Todas as tabelas fato possuem transformações apropriadas para as datas
  • Há tratamento adequado para remoção de duplicatas e erros
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Descrição: Verificar integridade referencial das datas

# Procurar por possíveis problemas de integridade referencial em comentários ou código
rg -i "null|missing|invalid|error.*date|date.*error" powerbi/Dashboard_Instagram.SemanticModel/

Length of output: 1822


Script:

#!/bin/bash
# Buscar definições de colunas de data e transformações relacionadas
rg -i "date|data" --type tmdl -A 5 powerbi/Dashboard_Instagram.SemanticModel/definition/tables/

Length of output: 126


Script:

#!/bin/bash
# Buscar definições e transformações de data em todos os arquivos
rg -i "data.*=|date.*=|#\".*data|#\".*date" -A 3 powerbi/Dashboard_Instagram.SemanticModel/definition/tables/

Length of output: 19362

powerbi/Dashboard_Instagram.SemanticModel/definition/model.tmdl (1)

1-8: Configurações de cultura e acesso a dados estão corretas

A configuração do modelo está adequada para o português brasileiro e as opções de acesso a dados estão bem definidas.

powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fFaixaEtaria.tmdl (1)

51-51: Documente a lógica de remoção de linhas

A remoção das últimas 5 linhas não está documentada. Não está claro por que essas linhas são removidas e se isso pode afetar a integridade dos dados.

Por favor, adicione um comentário explicando:

  1. Por que as últimas 5 linhas são removidas
  2. Se isso é uma regra de negócio permanente
  3. Como garantir que linhas válidas não sejam removidas acidentalmente
powerbi/Dashboard_Instagram.SemanticModel/definition/tables/fPrincipaisPaises.tmdl (1)

4-62: Revise a estrutura das colunas ocultas

Todas as colunas estão marcadas como ocultas (IsHidden), o que pode dificultar a usabilidade do modelo.

Por favor, verifique:

  1. Se as colunas realmente precisam estar ocultas
  2. Se isso não afetará negativamente os usuários do dashboard
  3. Se existe documentação explicando por que as colunas estão ocultas
powerbi/Dashboard_Instagram.Report/StaticResources/SharedResources/BaseThemes/CY24SU10.json (1)

1-744: Configuração do tema bem estruturada e completa

A configuração do tema segue as melhores práticas do Power BI, com definições claras para cores, estilos de texto e propriedades visuais.

Comment on lines +1 to +4
relationship e9d0c1b8-5952-4c61-aef1-a6fd7e16e2a5
joinOnDateBehavior: datePartOnly
fromColumn: dCalendario.Data
toColumn: LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.Date
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Especificar cardinalidade e direção do filtro cruzado

A relação com a tabela de datas local está configurada corretamente com joinOnDateBehavior, porém faltam especificações importantes.

Adicione as seguintes propriedades para todas as relações:

relationship e9d0c1b8-5952-4c61-aef1-a6fd7e16e2a5
    joinOnDateBehavior: datePartOnly
+   cardinality: manyToOne
+   crossFilteringBehavior: bothDirections
    fromColumn: dCalendario.Data
    toColumn: LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.Date
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
relationship e9d0c1b8-5952-4c61-aef1-a6fd7e16e2a5
joinOnDateBehavior: datePartOnly
fromColumn: dCalendario.Data
toColumn: LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.Date
relationship e9d0c1b8-5952-4c61-aef1-a6fd7e16e2a5
joinOnDateBehavior: datePartOnly
cardinality: manyToOne
crossFilteringBehavior: bothDirections
fromColumn: dCalendario.Data
toColumn: LocalDateTable_aa8841ec-a5ca-4698-a27e-101fb56b660f.Date

Comment on lines +13 to +15
annotation PBIDesktopVersion = 2.138.1452.0 (24.11)

annotation PBI_ProTooling = ["DevMode"]
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remover modo de desenvolvimento para produção

O modo de desenvolvimento está ativado através da configuração PBI_ProTooling = ["DevMode"]. Isso não é recomendado para ambientes de produção.

-annotation PBI_ProTooling = ["DevMode"]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
annotation PBIDesktopVersion = 2.138.1452.0 (24.11)
annotation PBI_ProTooling = ["DevMode"]
annotation PBIDesktopVersion = 2.138.1452.0 (24.11)

Comment on lines +24 to +36
partition fAlcance = m
mode: import
source =
let
Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_alcance.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),
#"Cabeçalhos Promovidos" = Table.PromoteHeaders(Fonte, [PromoteAllScalars=true]),
#"Tipo Alterado" = Table.TransformColumnTypes(#"Cabeçalhos Promovidos",{{"Data", type datetime}, {"Primary", Int64.Type}}),
#"Primeiros caracteres extraídos" = Table.TransformColumns(#"Tipo Alterado", {{"Data", each Text.Start(Text.From(_, "pt-BR"), 10), type text}}),
#"Colunas Renomeadas" = Table.RenameColumns(#"Primeiros caracteres extraídos",{{"Primary", "Alcance"}}),
#"Duplicatas Removidas" = Table.Distinct(#"Colunas Renomeadas", {"Data"}),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Duplicatas Removidas",{{"Data", type date}})
in
#"Tipo Alterado1"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Corrigir caminho do arquivo fonte

O caminho do arquivo CSV está hard-coded com um caminho absoluto específico, o que prejudica a portabilidade do relatório.

Utilize um caminho relativo ou parâmetro configurável:

-    Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_alcance.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),
+    Fonte = Csv.Document(File.Contents(Parameter.Value("CaminhoFonte") & "\tabela_alcance.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None]),

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines +33 to +34
#"Duplicatas Removidas" = Table.Distinct(#"Colunas Renomeadas", {"Data"}),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Duplicatas Removidas",{{"Data", type date}})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Confirmado: Remoção de duplicatas pode causar perda de dados

A tabela está configurada para somar os valores de alcance (summarizeBy: sum), mas a remoção de duplicatas por data está descartando registros ao invés de agregá-los. Substitua:

#"Duplicatas Removidas" = Table.Distinct(#"Colunas Renomeadas", {"Data"})

por:

#"Dados Agrupados" = Table.Group(#"Colunas Renomeadas", {"Data"}, {{"Alcance", each List.Sum([Alcance]), type number}})
🔗 Analysis chain

Atenção à remoção de duplicatas

A remoção de duplicatas baseada apenas na coluna Data pode resultar em perda de dados de alcance caso existam múltiplos registros para o mesmo dia.

Execute o script para verificar se existem múltiplos registros por data:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Descrição: Verificar possíveis dados duplicados por data

# Procurar por comentários ou código relacionados a agregações de dados
rg -i "duplicate|group.*by.*date|multiple.*records" powerbi/Dashboard_Instagram.SemanticModel/

Length of output: 96


Script:

#!/bin/bash
# Buscar definição completa da tabela fAlcance e suas medidas
echo "=== Definição da Tabela fAlcance ==="
rg -A 50 "table fAlcance" powerbi/Dashboard_Instagram.SemanticModel/

echo "=== Buscando Medidas Relacionadas ==="
rg "measure.*fAlcance" powerbi/Dashboard_Instagram.SemanticModel/

echo "=== Buscando Padrões de Agregação ==="
rg -i "sum|average|count.*fAlcance" powerbi/Dashboard_Instagram.SemanticModel/

Length of output: 24926

mode: import
source =
let
Fonte = Excel.Workbook(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_faixa_etaria.xlsx"), null, true),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Evite caminhos absolutos no código fonte

O caminho do arquivo Excel está hardcoded com um caminho absoluto local, o que pode causar problemas de manutenção e portabilidade.

Considere:

  1. Usar um caminho relativo
  2. Configurar o caminho como uma variável de ambiente
  3. Armazenar os dados em um local centralizado como um banco de dados ou serviço de armazenamento em nuvem

Comment on lines +110 to +113
#"Cabeçalhos Promovidos" = Table.PromoteHeaders(Planilha1_Sheet, [PromoteAllScalars=true]),
#"Tipo Alterado" = Table.TransformColumnTypes(#"Cabeçalhos Promovidos",{{"Principais cidades", type any}, {"Column2", type any}, {"Column3", type any}, {"Column4", type any}, {"Column5", type any}, {"Column6", type any}, {"Column7", type any}, {"Column8", type any}, {"Column9", type any}, {"Column10", type any}}),
#"Cabeçalhos Promovidos1" = Table.PromoteHeaders(#"Tipo Alterado", [PromoteAllScalars=true]),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Cabeçalhos Promovidos1",{{"São Paulo", type number}, {"Rio de Janeiro", type number}, {"Belo Horizonte", type number}, {"Fortaleza", type number}, {"Manaus", type number}, {"Salvador", type number}, {"Curitiba", type number}, {"Recife", type number}, {"Goiânia", type number}, {"Belém", type number}})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Otimize as transformações de dados

O processo atual possui passos redundantes:

  1. Promoção dupla de cabeçalhos
  2. Múltiplas transformações de tipo

Considere consolidar essas operações em um único passo para melhor desempenho.

mode: import
source =
let
Fonte = Excel.Workbook(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_principais_paginas.xlsx"), null, true),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Remova o caminho absoluto do arquivo

Similar ao problema em fPrincipaisCidades, o uso de caminho absoluto pode causar problemas de portabilidade. Considere usar um caminho relativo ou parâmetros.

Comment on lines +114 to +115
#"Linhas Inferiores Removidas" = Table.RemoveLastN(#"Tipo Alterado1",12),
#"Colunas Removidas" = Table.RemoveColumns(#"Linhas Inferiores Removidas",{"Column11"})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Revise a lógica de limpeza de dados

A remoção fixa de 12 linhas (RemoveLastN) é frágil e pode causar problemas se a estrutura dos dados mudar. Considere implementar uma lógica mais robusta baseada em condições dos dados.

mode: import
source =
let
Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_seguidores.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Caminho do arquivo hardcoded pode causar problemas de portabilidade

O caminho do arquivo CSV está hardcoded com um caminho absoluto específico do Windows, o que pode causar problemas ao compartilhar o dashboard com outros usuários ou ao mover para produção.

Sugestão de correção:

  1. Mova o arquivo CSV para uma pasta relativa ao arquivo .pbix
  2. Use um caminho relativo ou parâmetro configurável
-    Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_seguidores.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),
+    Fonte = Csv.Document(File.Contents("dados/tabela_seguidores.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_seguidores.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),
Fonte = Csv.Document(File.Contents("dados/tabela_seguidores.csv"),[Delimiter=";", Columns=1, Encoding=1252, QuoteStyle=QuoteStyle.None]),

mode: import
source =
let
Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_dados_de_publicacao.csv"),[Delimiter=",", Columns=19, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Caminho do arquivo hardcoded pode causar problemas de portabilidade

Similar ao problema anterior, o caminho do arquivo CSV está hardcoded.

Sugestão de correção:

  1. Mova o arquivo CSV para uma pasta relativa ao arquivo .pbix
  2. Use um caminho relativo ou parâmetro configurável
-    Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_dados_de_publicacao.csv"),[Delimiter=",", Columns=19, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
+    Fonte = Csv.Document(File.Contents("dados/tabela_dados_de_publicacao.csv"),[Delimiter=",", Columns=19, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Fonte = Csv.Document(File.Contents("C:\Users\Fundação de arte\Documents\Desktop\Bruna\Projetos\SouJunior Instagram\PowerBI\tabela_dados_de_publicacao.csv"),[Delimiter=",", Columns=19, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
Fonte = Csv.Document(File.Contents("dados/tabela_dados_de_publicacao.csv"),[Delimiter=",", Columns=19, Encoding=65001, QuoteStyle=QuoteStyle.Csv]),

Bru-Silveira and others added 4 commits January 24, 2025 09:27
Alterações finais
Alterações finais
Arquivo do código em Python usado para unificação das tabelas para desenvolvimento do Dashboard do Instagram
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
etl/tabelas_unificadas.py (4)

4-19: Evite duplicação ao ler e concatenar tabelas
Este bloco que faz leitura e concatenação de arquivos CSV para a tabela de alcance é funcional, porém repete uma lógica semelhante nos blocos subsequentes. Considere extrair esse processo para uma função utilitária reutilizável, reduzindo a duplicação de código. Além disso, verifique se o parâmetro skiprows=2 nas leituras CSV é de fato necessário e se reflete o layout padrão para todos os arquivos.

- df_alcance1 = pd.read_csv("./tabela1/alcance.csv", encoding="utf-8", sep=",", skiprows=2)
- df_alcance2 = pd.read_csv("./tabela2/alcance.csv", encoding="utf-8", sep=",", skiprows=2)
- df_alcance3 = pd.read_csv("./tabela3/alcance.csv", encoding="utf-8", sep=",", skiprows=2)
- df_alcance4 = pd.read_csv("./tabela4/alcance.csv", encoding="utf-8", sep=",", skiprows=2)
- df_tabela_alcance = pd.concat([
-     df_alcance1, 
-     df_alcance2, 
-     df_alcance3, 
-     df_alcance4], 
-     ignore_index=True)

+ def ler_e_unir_csvs(caminhos, encoding="utf-8", sep=",", skiprows=None):
+     dataframes = []
+     for caminho in caminhos:
+         df = pd.read_csv(caminho, encoding=encoding, sep=sep, skiprows=skiprows)
+         dataframes.append(df)
+     return pd.concat(dataframes, ignore_index=True)

+ caminhos_alcance = [
+     "./tabela1/alcance.csv",
+     "./tabela2/alcance.csv",
+     "./tabela3/alcance.csv",
+     "./tabela4/alcance.csv"
+ ]
+ df_tabela_alcance = ler_e_unir_csvs(caminhos_alcance, sep=",", skiprows=2)
+ print(df_tabela_alcance.head(40))
+ df_tabela_alcance.to_csv("tabela_alcance.csv", index=False, encoding="utf-8")

20-33: Padronize os parâmetros na função pd.read_csv
Aqui, os arquivos de "dados_de_publicacao" são lidos sem encoding="utf-8" e sem sep=";". Se todos os CSVs têm o mesmo formato ou se a variação entre eles for esperada, deixe isso evidente na nomenclatura ou na documentação do código para evitar confusão.


52-68: Manter uniformidade no tratamento de erros
Não há tratamento de exceções nesta leitura e concatenação de arquivos para a tabela de seguidores. Em ambientes de produção, sugerimos o uso de try-except para lidar com falhas na leitura de arquivos, caminhos inválidos ou problemas de permissão. Isso aumentaria a robustez do código, principalmente em pipelines de ETL executados em modo automático.


69-85: Aproveite logs ou mensagens de status
Aqui também seria útil incluir logs informando ao usuário sobre o início e término da concatenação dos dados da tabela de visitas. Assim, caso ocorra algum problema, o ponto de falha pode ser rapidamente localizado em um log de execução.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1c873b7 and a67b975.

📒 Files selected for processing (1)
  • etl/tabelas_unificadas.py (1 hunks)
🔇 Additional comments (2)
etl/tabelas_unificadas.py (2)

1-1: Verifique a consistência das dependências
O uso do import pandas as pd está correto, mas seria recomendável confirmar se há dependências adicionais necessárias (por exemplo, numpy, caso haja operações mais complexas) em seu ambiente de execução para evitar erros futuros.


35-50: Confirme se os delimitadores diferem entre os arquivos
Observe que as leituras de CSV nesta seção usam sep=";", enquanto na tabela de alcance é sep=",". Se os arquivos CSV tiverem realmente formatos distintos e justificados, mantenha-os separadamente; caso contrário, verifique se há uniformidade no conjunto de dados, pois diferenças de separadores podem ocasionar problemas na análise posterior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant