• +351 91 33 888 29
    • clico@clico.pt

    Arquivo do autor

    Guia Prático: Espelhar Todas as Listas do SharePoint com Power Automate

    Sincronizar Esquemas de Listas do SharePoint com Power Automate (Multi-Ambiente)

    Sincronizar Esquemas de Listas do SharePoint com Power Automate (Multi-Ambiente)

    Quer manter todas as listas dos seus sites de destino com o mesmo esquema (colunas) que as listas de um site de origem? Neste guia mostro o flow que uso para:

    • Percorrer todas as listas e bibliotecas do site de origem;
    • Criar a lista/biblioteca no destino se ainda não existir;
    • Comparar campos (por InternalName) e criar automaticamente os que faltam;
    • Lidar com vários destinos (ambientes diferentes);
    • Tratar Lookups com mapeamento por ambiente.

    Sem conectores premium, apenas Send an HTTP request to SharePoint e ações standard. 👇

    Quando usar (e quando não)

    Use quando precisa de manter consistência de esquema entre ambientes (Dev/Test/Prod) sem trabalho manual.

    Não use para migrar dados (linhas) nem para tipos muito específicos como Managed Metadata complexos — podem ficar para uma fase 2.

    Arquitetura do Flow

    • Trigger: Recurrence (ex.: de hora a hora).
    • Origem: 1 site SharePoint.
    • Destino(s): 1..N sites SharePoint.
    • Estratégia:
      1. Listar todas as listas/bibliotecas visíveis na origem;
      2. Para cada destino:
        • Garantir que a lista/biblioteca existe (cria se faltar);
        • Obter campos da origem (apenas custom);
        • Obter campos do destino;
        • MissingFields = origem − destino;
        • Criar MissingFields com POST à API (sem XML) — e XML/ajustes só quando necessário (Lookup, etc.).

    Pré-requisitos

    • Conta de serviço com permissões para ler e alterar esquema nos sites de origem e destino(s).
    • Conector Send an HTTP request to SharePoint configurado nos tenants necessários.
    • Naming consistente de listas (ou use o caminho server-relative).

    Variáveis base (Initialize)

    • SourceSiteUrl (String) → URL do site origem
      Ex.: https://<tenant>.sharepoint.com/sites/Origem
    • TargetSites (Array) → destinos + (opcional) mapas por ambiente:
    [
      {
        "siteUrl": "https://<tenantA>.sharepoint.com/sites/DestinoA",
        "lookupMap": {
          "ClienteId": { "TargetListServerRelativeUrl": "/sites/DestinoA/Lists/Clientes" }
        }
      },
      {
        "siteUrl": "https://<tenantB>.sharepoint.com/sites/DestinoB",
        "lookupMap": { }
      }
    ]
    • CurrentSiteUrl (String) = ""
    • CurrentListTitle (String) = ""
    • CurrentLookupMap (Object) = {}
    • TargetInternalNames (Array) = []

    Dica: pode guardar TargetSites num ficheiro JSON numa biblioteca e lê-lo com “Get file content”.

    Passo 1 — Listar listas/bibliotecas na origem

    HTTP (GET) – Get_All_Lists

    • Site Address: @{variables('SourceSiteUrl')}
    • Headers: Accept: application/json;odata=nometadata
    • URI:
    _api/web/lists?$select=Title,BaseTemplate,Hidden,RootFolder/ServerRelativeUrl,Id
    &$expand=RootFolder
    &$filter=(Hidden eq false) and ((BaseTemplate eq 100) or (BaseTemplate eq 101))
    &$top=5000

    Apply to each – ForEach_SourceLists
    From@{body('Get_All_Lists')?['value']}

    • Compose – SourceListTitle@{items('ForEach_SourceLists')?['Title']}
    • Compose – SourceListUrl@{items('ForEach_SourceLists')?['RootFolder']?['ServerRelativeUrl']}

    BaseTemplate 100 = Lista; 101 = Biblioteca. Adicione outros se precisar.

    Passo 2 — Para cada destino

    Apply to each – ForEach_TargetSites
    From@{variables('TargetSites')}

    • Set var – CurrentSiteUrl@{items('ForEach_TargetSites')?['siteUrl']}
    • Set var – CurrentLookupMap@{items('ForEach_TargetSites')?['lookupMap']}
    • Set var – CurrentListTitle@{outputs('SourceListTitle')}

    2.1 Garantir que a lista existe

    HTTP (GET) – Get_Target_List_By_Title

    • Site: @{variables('CurrentSiteUrl')}
    • Headers: Accept: application/json;odata=nometadata
    • URI:
    _api/web/lists?$filter=Title eq '@{replace(variables('CurrentListTitle'),'''','''''')}'
    &$select=Id,Title,BaseTemplate&$top=1

    Condition – ListExists@greater(length(body('Get_Target_List_By_Title')?['value']), 0)

    If NO → HTTP (POST) – Create_List

    • Site: @{variables('CurrentSiteUrl')}
    • Headers: Accept: application/json;odata=verbose + Content-Type: application/json;odata=verbose
    • URI: _api/web/lists
    • Body (Expression):
    @json(
      concat(
        '{"__metadata":{"type":"SP.List"},"Title":"',
        replace(variables('CurrentListTitle'),'"','\"'),
        '","BaseTemplate":',
        string(items('ForEach_SourceLists')?['BaseTemplate']),
        ',"AllowContentTypes":true,"ContentTypesEnabled":true}'
      )
    )

    Se preferir criar por caminho (para bibliotecas com nomes localizados), também pode usar _api/web/folders + RootFolder (extra opcional).

    Passo 3 — Obter campos da origem (custom)

    HTTP (GET) – Get_Source_Fields

    • Site: @{variables('SourceSiteUrl')}
    • Headers: Accept: application/json;odata=nometadata
    • URI:
    _api/web/GetList(@listUrl)/Fields
    ?$select=Title,InternalName,TypeAsString,SchemaXml,Hidden,ReadOnlyField,Sealed,FromBaseType,CanBeDeleted,Required
    &@listUrl='@{outputs('SourceListUrl')}'

    Filter array – Keep_Custom_Fields
    From: @{body('Get_Source_Fields')?['value']}

    @and(
      equals(item()?['Hidden'], false),
      equals(item()?['FromBaseType'], false),
      equals(item()?['Sealed'], false),
      equals(item()?['ReadOnlyField'], false)
    )

    Select – Project_Source_Fields
    From: @{body('Keep_Custom_Fields')}
    Map: InternalName, Title, TypeAsString, Required, SchemaXml.

    Passo 4 — Obter campos do destino & calcular “MissingFields”

    • Set var – TargetInternalNames[] (limpar)

    HTTP (GET) – Get_Target_Fields

    • Site: @{variables('CurrentSiteUrl')}
    • Headers: Accept: application/json;odata=nometadata
    • URI:
    _api/web/lists/getbytitle('@{replace(variables('CurrentListTitle'),'''','''''')}')
    /Fields?$select=InternalName

    Apply to each – ForEach_TargetFields
    From: @{body('Get_Target_Fields')?['value']}
    Append to array – TargetInternalNames = @{item()?['InternalName']}

    Filter array – MissingFields
    From: @{body('Project_Source_Fields')}

    @not(contains(variables('TargetInternalNames'), item()?['InternalName']))

    Passo 5 — Criar MissingFields

    Apply to each – CreateMissingFields
    From: @{body('MissingFields')}

    Switch – On@{items('CreateMissingFields')?['TypeAsString']}

    Cabeçalhos e Endpoint (iguais em todos os cases)

    • Site Address: @{variables('CurrentSiteUrl')}
    • URI: _api/web/lists/getbytitle('@{replace(variables('CurrentListTitle'),'''','''''')}')/Fields
    • Headers:
      • Accept: application/json;odata=verbose
      • Content-Type: application/json;odata=verbose

    Bodies como Expression (@json(concat(...)))

    Text

    @json(concat('{"__metadata":{"type":"SP.FieldText"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":2,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"MaxLength":255}'))

    Note (multilinha)

    @json(concat('{"__metadata":{"type":"SP.FieldMultiLineText"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":3,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"NumberOfLines":6,"RichText":false,"AppendOnly":false}'))

    Number

    @json(concat('{"__metadata":{"type":"SP.FieldNumber"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":9,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),'}'))

    DateTime

    @json(concat('{"__metadata":{"type":"SP.FieldDateTime"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":4,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"DisplayFormat":0}'))

    Boolean

    @json(concat('{"__metadata":{"type":"SP.FieldBoolean"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":8,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"DefaultValue":"0"}'))

    User

    @json(concat('{"__metadata":{"type":"SP.FieldUser"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":20,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"AllowMultipleValues":false,"SelectionMode":0}'))

    URL

    @json(concat('{"__metadata":{"type":"SP.FieldUrl"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":11,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"DisplayFormat":0}'))

    Choice (ajuste as opções)

    @json(concat('{"__metadata":{"type":"SP.FieldChoice"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":6,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"Choices":{"results":["Opção 1","Opção 2","Opção 3"]},"EditFormat":0}'))

    MultiChoice

    @json(concat('{"__metadata":{"type":"SP.FieldMultiChoice"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":15,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"Choices":{"results":["A","B","C"]},"FillInChoice":false}'))
    Precisa de ajuda

    Lookup / LookupMulti

    1. HTTP (GET) – GetRefListId
      Site: @{variables('CurrentSiteUrl')}  |  Headers: Accept: application/json;odata=nometadata
      URI (por caminho, usando CurrentLookupMap):
    _api/web/GetList(@listUrl)?$select=Id
    &@listUrl='@{variables('CurrentLookupMap')?[items('CreateMissingFields')?['InternalName']]?['TargetListServerRelativeUrl']}'

    Compose – RefListId@{body('GetRefListId')?['Id']}

    Lookup (simples)

    @json(concat('{"__metadata":{"type":"SP.FieldLookup"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":7,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"LookupList":"{',outputs('RefListId'),'}","LookupField":"Title","AllowMultipleValues":false}'))

    LookupMulti

    @json(concat('{"__metadata":{"type":"SP.FieldLookup"},"Title":"',replace(items('CreateMissingFields')?['Title'],'"','\"'),'","StaticName":"',items('CreateMissingFields')?['InternalName'],'","FieldTypeKind":7,"Required":',if(items('CreateMissingFields')?['Required'],'true','false'),',"LookupList":"{',outputs('RefListId'),'}","LookupField":"Title","AllowMultipleValues":true}'))

    Se não existir entrada no CurrentLookupMap para aquele campo → não substitua (crie como simples) ou salte com log.

    Boas práticas (o que funciona melhor)

    • Compare por InternalName, não por Title.
    • Faça escape de apóstrofos em getbytitle: replace(..., '''', '''''').
    • Prefira GetList(@listUrl) para bibliotecas/nomes localizados.
    • Controle de concorrência no loop de criação (1–3) para evitar throttling.
    • Crie logs (site/lista/campo/resultado) numa lista “AdminLogs”.
    • Use guard-rails: Conditions para só tratar Lookup quando houver lookupMap.
    • Faça um teste “seco”: primeiro calcule os MissingFields e escreva log; depois ative a criação.

    Limitações & extensões

    • Managed Metadata (Taxonomia) e Calculated complexos: recomendo criar via SchemaXml (ou PnP/CLI) numa segunda fase.
    • Renomeações (Title): para sincronizar títulos, adicione um PATCH/MERGE para .../Fields/getbyinternalnameortitle('INTERNAL') com "Title":"Novo Título".
    • Content Types: em ambientes com content types partilhados, pode ser preferível publicar/associar content types em vez de mexer diretamente em cada lista.

    Conclusão

    Com este flow passa a ter governança de esquema: qualquer lista nova/alterada na origem é replicada para todos os destinos, sem cliques manuais. A peça-chave é usar a API do SharePoint para listar, comparar e criar campos de forma segura, com variações para Lookups e bibliotecas.

    clicopt
    PowerBI vs Excel

    Power BI vs Excel: Quando Usar Cada Ferramenta?

    📊 O Excel é, há décadas, uma das ferramentas mais utilizadas para análise e gestão de dados. No entanto, com o crescimento do volume de informação e a necessidade de visualizações mais interativas, o Power BI ganhou destaque como solução moderna para Business Intelligence. Neste artigo vamos comparar as duas ferramentas e responder à pergunta: quando usar cada uma?


    🟢 O que é o Excel?

    O Excel é uma ferramenta de folha de cálculo desenvolvida pela Microsoft, muito utilizada em empresas, escolas e no dia a dia. Permite cálculos simples e complexos, criação de tabelas dinâmicas, gráficos básicos e organização de dados de forma acessível.

    ✅ Pontos fortes do Excel:

    • 🖥️ Interface familiar e intuitiva
    • 🔢 Flexibilidade para cálculos e pequenas análises
    • 📑 Bom para relatórios rápidos e listas simples

    ⚠️ Limitações:

    • 📉 Difícil de gerir grandes volumes de dados
    • 📊 Visualizações limitadas
    • ✍️ Propenso a erros manuais

    🟡 O que é o Power BI?

    O Power BI é uma plataforma de Business Intelligence também criada pela Microsoft. Permite importar dados de múltiplas fontes, criar dashboards interativos, aplicar modelos de dados e utilizar linguagem DAX para análises avançadas.

    ✅ Pontos fortes do Power BI:

    • 📊 Dashboards visuais e interativos
    • ⚡ Capacidade de trabalhar com milhões de linhas de dados
    • 🔄 Atualizações automáticas com ligação a várias fontes
    • 🌍 Excelente colaboração em ambiente cloud

    ⚠️ Limitações:

    • 📘 Requer curva de aprendizagem maior
    • 📝 Não é tão prático para cálculos simples e rápidos
    • 💰 Algumas funcionalidades avançadas requerem licença Pro

    📌 Comparação lado a lado

    CritérioExcelPower BI
    Facilidade de uso✅ Intuitivo, conhecido📘 Requer aprendizagem
    Volume de dados📉 Limitado⚡ Escala com milhões
    Visualização📊 Gráficos básicos📈 Dashboards avançados
    Colaboração👥 Bom no Office 365🌍 Excelente na cloud
    Custo💼 Incluído no Office💰 Versão gratuita + Pro

    📒 Quando usar Excel

    O Excel continua a ser imbatível quando se trata de análises rápidas e individuais. É ideal para:

    • 📑 Relatórios pequenos
    • ⚡ Análises rápidas e listas
    • 🔢 Cálculos diretos e tabelas simples

    📊 Quando usar Power BI

    O Power BI é a escolha certa quando a análise de dados precisa de escala, automação e partilha. É ideal para:

    • 📈 Grandes volumes de dados
    • 👥 Dashboards interativos para equipas
    • 🔄 Necessidade de atualizações automáticas

    🤝 Usar em conjunto

    O melhor dos dois mundos pode ser alcançado ao usar Excel e Power BI em conjunto. Por exemplo, podes preparar os dados e cálculos iniciais no Excel e depois importar para o Power BI para criar dashboards dinâmicos e interativos.


    ✅ Conclusão

    O Excel continua a ser uma ferramenta poderosa para tarefas rápidas e análises individuais, enquanto o Power BI destaca-se em análises complexas, interativas e colaborativas. A verdadeira resposta não é escolher apenas um, mas sim perceber quando usar cada ferramenta ou até combiná-las para tirar o máximo proveito dos dados.

    clicopt

    PowerApps: O Manual Essencial para Criar Apps de Forma Fácil e Transformadora

    Como começar com PowerApps: Manual Simples para Iniciantes em TI

    Se é da área de TI, provavelmente já sentiu a pressão para criar soluções rápidas, mesmo sem ter muita experiência em programação. Felizmente, plataformas como o PowerApps surgiram para simplificar a sua vida.

    Este manual simples é para si, que tem pouco conhecimento de programação, mas quer começar rapidamente a criar aplicações com ferramentas low-code.

    O que é o PowerApps e porque é importante?

    O PowerApps é uma plataforma da Microsoft concebida para simplificar o desenvolvimento de aplicações sem necessidade de conhecimentos aprofundados em programação. É ideal para profissionais de TI que desejam entregar soluções práticas, rápidas e eficazes, sem depender de equipas especializadas.

    A importância do PowerApps está na facilidade de utilização e na possibilidade de ligação a vários serviços e dados, como SharePoint, Excel, Azure e Dynamics 365. Isso permite automatizar tarefas, digitalizar processos e aumentar a produtividade com pouco código.

    Como criar a sua primeira aplicação no PowerApps

    1. Aceda à plataforma: Vá ao site do PowerApps e inicie sessão com a sua conta Microsoft.

    2. Escolha um modelo: Para iniciantes, a Microsoft oferece vários modelos pré-configurados. Escolha o que estiver mais próximo do que precisa.

    3. Personalize a aplicação: Utilize a interface intuitiva para adicionar controlos como botões, formulários e galerias. Arraste e largue componentes visuais com facilidade.

    4. Ligue os seus dados: Integre fontes de dados como Excel ou SharePoint. O PowerApps facilita o acesso e utilização dessas informações diretamente na sua aplicação.

    5. Teste e publique: Use o modo de visualização para testar o funcionamento. Quando estiver pronto, publique e partilhe com colegas.

    Dicas práticas para iniciantes no PowerApps

    • Comece de forma simples: Evite criar soluções complexas logo no início. Ganhe confiança com aplicações básicas.

    • Explore tutoriais: A Microsoft disponibiliza muitos recursos gratuitos para acelerar a sua aprendizagem.

    • Experimente e erre: Não tenha receio de testar. Quanto mais experimentar, mais rapidamente aprenderá.

    Exemplos reais de utilização

    O PowerApps já ajudou profissionais de TI sem experiência em programação a desenvolver:

    • Aplicações para registo de entrada e saída de funcionários.

    • Sistemas simples de gestão de inventário.

    • Ferramentas de pesquisa e feedback de clientes.

    Estas soluções trouxeram melhorias rápidas e visíveis para as empresas, mostrando que o poder da inovação está ao alcance de todos, e não apenas dos especialistas.

    Conclusão

    Dominar o PowerApps é acessível mesmo para quem tem pouco ou nenhum conhecimento técnico aprofundado. Com dedicação e prática, poderá criar aplicações úteis e eficazes para resolver problemas quotidianos na sua empresa.

    Comece já hoje a explorar o potencial do desenvolvimento low-code com o PowerApps e veja como pode transformar a forma como a sua empresa trabalha.

    Se precisar de consultoria especializada ou ajuda no desenvolvimento da sua aplicação, não hesite em contactar-nos. Estamos aqui para ajudar e acelerar os seus resultados com PowerApps.

    Contacte-nos

    Ilustração simples sobre PowerApps para iniciantes em TI
    Ilustração simples sobre PowerApps para iniciantes em TI
    clicopt

    Power Automate: A Forma Mais Rápida de Automatizar Tarefas e aumentar a Produtividade

    Power Automate: Automatiza Tarefas e Aumenta a Produtividade

    Imagina que começas o teu dia com uma pilha de tarefas repetitivas e aborrecidas. E se pudesses automatizá-las com apenas alguns cliques? É aqui que entra o Power Automate, a ferramenta da Microsoft que está a transformar a forma como trabalhamos.

    🧰 O que é o Power Automate?

    O Power Automate é uma plataforma de automação low-code que permite ligar aplicações e serviços como Outlook, Excel, Teams, SharePoint, Gmail e muitos outros. Através de “fluxos” automáticos, podes configurar acções como enviar um e-mail, mover ficheiros, actualizar listas ou enviar notificações sem tocar numa linha de código.

    Porque é que está a ganhar assim tanta popularidade?

    • Acessível a todos: mesmo sem conhecimentos técnicos, qualquer pessoa pode criar fluxos.

    • Resultados imediatos: pequenas automatizações poupam horas por semana.

    • Copilot com IA: cria fluxos com linguagem natural (ex: “enviar e-mail quando novo ficheiro é adicionado”).

    • Mais de 500 conectores: liga-te facilmente a centenas de apps populares.

    Exemplo prático: um restaurante que automatizou tudo

    Durante um evento da Microsoft, um pequeno empresário de restauração partilhou o seguinte:

    “Uso o Power Automate para recolher dados inseridos numa lista no Microsoft Lists e passá-los automaticamente para um Excel. Depois, envio e-mails aos clientes com o resumo do pedido, notifico a equipa interna, e reinicio a lista todas as segundas-feiras com um simples clique.”

    Com este fluxo, ele automatizou a produção, comunicação interna e gestão de dados. Tudo sem um programador. Resultado? Horas poupadas e uma equipa mais eficiente.

    10 Situações onde o Power Automate faz magia

    SituaçãoBenefício
    Receber e-mails com anexosGuardar ficheiros automaticamente
    Registar formuláriosPreencher listas ou bases de dados
    Processar pedidos de fériasAprovação automática com alertas
    Gerar relatórios diáriosEnviar Excel com dados do dia anterior
    Sincronizar contactos ou tarefasEvitar duplicados entre sistemas
    Alertas para mensagens importantesNotifica-te via Teams ou SMS
    Criação de ficheiros PDFGera documentos com base em formulários
    Pedidos ao suporteAbre ticket automaticamente
    Fluxos de vendas ou leadsAutomatiza follow-up com os clientes
    Limpeza de ficheiros repetidosElimina duplicados num só passo

     

    Novidades em 2025: ainda mais poder com IA

    Com a nova versão do Power Automate, estas são algumas funcionalidades que estão a impressionar:

    • Fluxos gerados por IA: descreve o que queres em linguagem natural, e o Copilot cria o fluxo.

    • Automatização de desktop inteligente: o sistema aprende com os teus cliques e replica.

    • Process mining integrado: identifica processos ineficazes e sugere melhorias.

    • Reutilização de componentes: cria “peças” reutilizáveis para os teus fluxos.

    Começar é mais simples do que se pensa

    1. Entra em Power Automate

    2. Escolhe um modelo pronto ou cria um do zero

    3. Define o gatilho (por exemplo: “quando um e-mail chega”)

    4. Escolhe as acções que queres (enviar resposta, guardar ficheiro, etc.)

    5. Testa, ajusta e activa o teu fluxo

    Dica extra: partilha e torna-te um herói da produtividade

    Mostra os teus fluxos à equipa. Partilha prints, resultados e poupanças reais. Usa hashtags como #PowerAutomate #Produtividade no LinkedIn. Mostra que com criatividade, qualquer pessoa pode automatizar o trabalho.

    Power Automate
    clicopt

    Guia de Estudo para a Certificação Power BI

    Este PL-300 Study Guide foi criado para ajudar analistas de dados a prepararem-se para a certificação PL-300 (anteriormente DA-100), que valida competências em análise de dados com o Microsoft Power BI. Neste guia, encontras os principais tópicos do exame, exercícios práticos e soluções para maximizar as tuas hipóteses de sucesso.

    Podes ainda fazer o download deste guia em formato PDF em:

    PL300 – Study Guide – Tudo em Conta

    clicopt

    Power BI – Iniciação

     O Power BI é uma ferramenta de Business Intelligence (BI) desenvolvida pela Microsoft que permite a análise e visualização de dados de forma interativa. Foi lançado oficialmente em 2015 e tem como objetivo facilitar a criação de relatórios e dashboards dinâmicos, ajudando empresas e profissionais a tomar decisões baseadas em dados.

    Se pretender pode adquirir este PDF em:

    PowerBI Iniciação – Tudo em Conta

    clicopt
    Categorize Email

    Power Automate – Categorize Email

    Temos um Use Case para categorizar um email. Temos uma caixa partilhada, onde são recebidos vários emails que várias pessoas os tratam. Toda a informação é guardada numa lista de sharepoint (no caso) e com um sistema de Ticketing tool, conseguimos associar um email se for novo a uma pessoa que esteja na lista de disponível ou se existir a quem já o trata.

    No fluxo, onde está: “environment variable”, colocam a caixa de correio pretendida.

    Body ID vem da mensagem que recebe no início do fluxo, que é o que despoleta o correr do fluxo.

    URI: https://graph.microsoft.com/v1.0/users/”environment variable”/mailFolders/Inbox/messages/@{triggerOutputs()?[‘body/id’]}

    Method: Patch

    Body: {
    “categories”: [“Orange Category”]
    }

    Deixo como categorizar o mesmo, para as restantes condições, contacte-nos pelos nossos meios.

    Categorize Email
    clicopt

    PL-300 Study

    O exame PL-300 testa suas habilidades e conhecimentos na preparação de dados, modelagem de dados, visualização e análise de dados e implantação e manutenção de resultados finais usando o Power BI. O exame foi concebido para indivíduos que utilizam o Power BI para ajudar as empresas a tomar decisões baseadas em dados.

    Se pretender, pode fazer download deste PDF:

    PL 300 – Microsoft Power BI

    clicopt

    Como Criar Tabela Calendário no Power BI com Power Query

    Demonstração de uma das formas de criar a tabela calendário no Power BI.
    Esta por meio da utilização do Power Query.

    O que é o Power Query?

    Para quem não sabe, o Power Query é um mecanismo disponível em alguns produtos da Microsoft, entre eles o Azure, o Power BI e nas últimas versões do Excel, com a finalidade de realizar o processo de ETL (Extração, Transformação e Carregamento) dos dados. Por outras palavras, é através desta ferramenta que são preparadso os dados antes de serem consumidos pelo Power BI ou demais ferramentas.

    O Power Query possui um editor gráfico com múltiplas funcionalidades auxiliando o utilizador na execução das principais tarefas de tratamento de dados. Entretanto, algumas dessas transformações podem exigir além do que há disponível na interface gráfica, sendo necessário o desenvolvimento através de um editor de script próprio da ferramenta, por meio da utilização da linguagem M.

    Criar a tabela

    A tabela calendário é uma das tabelas mais importantes e essenciais para qualquer projeto de BI, pois ela está presente em praticamente todos os cenários de negócios, devido a necessidade de análise por meio de uma dimensão temporal.

    Para criação de uma tabela calendário dentro do Power Query, é necessário seguir passo a passo conforme demonstrado a seguir:

    1. Abrir o editor do Power Query dentro do Power BI

    Para abrir o editor do Power Query, deve-se aceder a guia página inicial dentro do Power BI e clicar no botão transformar dados, conforme imagem abaixo:

    De seguido temos a janela principal do editor do Power Query, conforme podemos ver na imagem seguinte.

    2. Criar uma consulta nula

    Com o editor do Power Query aberto, deve-se aceder na guia Página Inicial a opção Nova Fonte e em seguida carregar em consulta nula, conforme demonstrado na imagem seguinte.

    Depois do passo anterior, escolhe a consulta que aparecerá no painel do navegador, localizado na parte lateral esquerda do editor do Power Query, conforme imagem a seguir:

     

    3. Abrir o Editor de Consulta Avançado.

    Depois que se escolhe a consulta, deve-se abrir o editor Avançado de Consulta, que está na guia Página Inicial, na opção Editor Avançado.

    Com isto, temos uma nova janela com o próprio editor de consultas na sua estrutura padrão let in.

    4. Criar a tabela Calendário.

    O editor de consultas trabalha os dados através da linguagem M.

    De seguida, segue um código para criar uma consulta que retorna uma tabela calendário de janeiro de 2022 a dezembro de 2025, pode sempre alterar o período do calendário, para isso basta mudar o ano presente nas variáveis AnoInicial e AnoFinal que se encontam no início do código. O AnoFinal está a ir buscar o Ano atual. No ecrã anterior, substitui o código padrão pelo que esta a seguir e depois de substituído o código no editor de consultas, basta carregar no botão concluído que automaticamente o Power Query criará a tabela calendário juntamente com os principais campos necessários para utilização, como pode se pode ver na imagem a seguir ao código.

    let
        AnoInicial = 2022,
        AnoFinal = Date.Year(DateTime.LocalNow()),
        //Declara uma data inicial
        DataInicial = Date.StartOfYear(#date(AnoInicial, 1, 1)),
        //Declara uma data final
        DataFinal = Date.EndOfYear(#date(AnoFinal, 12, 31)),
        //Conta a quantidade de dias entre as duas datas
        QtdeDias = Duration.Days(DataFinal-DataInicial)+1,
        //Cria lista de datas
        Datalist = List.Dates(DataInicial,QtdeDias,#duration(1,0,0,0)),
        //Converter para Tabela
        ConvertTabela = Table.FromList(Datalist, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        //Altera Tipo
        AlteraTipo = Table.TransformColumnTypes(ConvertTabela,{{"Column1", type date}}),
        //Renomeia Coluna
        RenomeiaColuna = Table.RenameColumns(AlteraTipo,{"Column1", "Data"}),
     
        //Criação de Colunas Adicionais
        //Criar Coluna ANO
        Ano = Table.AddColumn(RenomeiaColuna, "Ano", each Date.Year([Data]),Int64.Type),
        //Criar Coluna Mês
        Mes = Table.AddColumn(Ano, "Mes", each Date.Month([Data]),Int64.Type),
        //Criar Coluna Nome do Mês
        Nome_Mes = Table.AddColumn(Mes, "Nome_Mes", each Date.MonthName([Data]), type text),
        //Criar Coluna Dia
        Dia_do_Mes = Table.AddColumn(Nome_Mes, "Dia_Mes", each Date.Day([Data]), Int64.Type),
        //Criar Coluna Dia do Ano
        Dia_do_Ano = Table.AddColumn(Dia_do_Mes, "Dia_Ano", each Date.DayOfYear([Data]), Int64.Type),
        //Criar Coluna Dia da Semana
        Dia_Semana = Table.AddColumn(Dia_do_Ano, "Dia_Semana", each Date.DayOfWeek([Data]), Int64.Type),
        //Criar Coluna Dia da Semana
        Nome_Dia_Semana = Table.AddColumn(Dia_Semana, "Nome_Dia_Semana", each Date.DayOfWeekName([Data]), type text),
        //Criar Coluna Dia da Semana
        Trimestre = Table.AddColumn(Nome_Dia_Semana, "Trimestre", each Date.QuarterOfYear([Data]), Int64.Type),
        //Criar Coluna Semana do Ano
        Semana_Ano = Table.AddColumn(Trimestre, "Semana_Ano", each Date.WeekOfYear([Data]), Int64.Type),
        //Criar Coluna Semana do Mes
        Semana_Mes = Table.AddColumn(Semana_Ano, "Semana_Mes", each Date.WeekOfMonth([Data]), Int64.Type)
    
    in
        Semana_Mes 

    Renomeia-se tabela Consulta1 para dCalendario na janela de propriedades, localizado na lateral direita do Power Query, conforme demonstrado na imagem seguinte.

    5. Visualizar a tabela dentro do Power BI.

    Por fim, para visualizar a tabela dentro do Power BI é necessário aplicar as alterações feitas. Para isso, basta carregar no botão Fechar e Aplicar na guia Página Inicial do Power Query.

    Por fim, o Editor do Power Query é fechado e retorna a janela de edição do Power BI com a tabela calendário já inserida, podendo ser visualizada no Painel de Campos, localizado na lateral direita da janela do Power BI, podendo ser acedida para modelação do relatório.

    clicopt

    DateTimeValue Function

    Converter datas é um desafio e ter uma função que faz isso, facilita-nos bastante o trabalho.
    A função DateTimeValue faz isso por nós. A função converte uma string num objeto de data e hora.

    DateTimeValue("2024-10-01")
    
    retornará:
    
    01-10-2024 00:00
    Date TimeValue
    Experimentemos utilizar com hora:
    DateTimeValue("2024-10-01 16:00")

    retornará:
    01/10/2024 16:00
    Date time Value with Hour
    Date and Time Function
    clicopt
    Advertisements
    Show Buttons
    Hide Buttons