Configurar a atualização incremental e os dados em tempo real
Este artigo descreve como configurar a atualização incremental e os dados em tempo real para modelos semânticos. Para saber mais sobre como configurar a atualização incremental para fluxos de dados, confira Recursos premium de fluxos de dados – atualização incremental.
A configuração da atualização incremental inclui a criação dos parâmetros RangeStart e RangeEnd, a aplicação de filtros e a definição de uma política de atualização incremental. Depois de publicar no serviço do Power BI, você executará uma operação de atualização inicial no modelo. A operação de atualização inicial e as operações de atualização posteriores aplicam a política de atualização incremental definida por você. Antes de concluir essas etapas, garanta que você entendeu completamente a funcionalidade descrita em Atualização incremental e dados em tempo real para modelos semânticos.
Criar parâmetros
Nesta tarefa, você usará o Editor do Power Query para criar os parâmetros RangeStart e RangeEnd com valores padrão. Os valores padrão se aplicam somente ao filtrar os dados a serem carregados no modelo no Power BI Desktop. Os valores inseridos devem incluir apenas uma pequena quantidade dos dados mais recentes da sua fonte de dados. Quando publicados no serviço, esses valores de período de tempo são substituídos pela política de atualização incremental. Ou seja, a política cria janelas de dados de entrada, uma após a outra.
No Power BI Desktop, selecione Transformar dados na faixa de opções Página Inicial para abrir o Editor do Power Query.
Selecione a lista suspensa Gerenciar Parâmetros e escolha Novo Parâmetro.
No campo Nome, insira RangeStart (diferencia maiúsculas de minúsculas). No campo Tipo, selecione Data/Hora na lista suspensa. No campo Valor Atual, insira um valor de data e hora de início.
Selecione Novo para criar um segundo parâmetro chamado RangeEnd. No campo Tipo, selecione Data/Hora e no campo Valor Atual, insira um valor de data e hora de término. Selecione OK.
Agora que definiu os parâmetros RangeStart e RangeEnd, você filtrará os dados a serem carregados no modelo com base nesses parâmetros.
Filtrar dados
Observação
Antes de continuar com essa tarefa, verifique se a tabela de origem tem uma coluna de data do tipo de dados Data/hora. Se não tiver uma coluna Data/Hora, mas tiver uma coluna de data de chaves alternativas inteiras na forma de yyyymmdd
, siga as etapas em Converter DateTime em inteiro, mais adiante neste artigo, para criar uma função que converte o valor de data/hora nos parâmetros para corresponder à chave alternativa inteira da tabela de origem.
Agora você aplicará um filtro com base em condições nos parâmetros RangeStart e RangeEnd.
No Editor do Power Query, selecione a coluna de data em que deseja filtrar e escolha a seta suspensa >Filtros de Data>Filtro Personalizado.
Em Filtrar Linhas, para especificar a primeira condição, selecione é posterior ou é posterior ou igual a, escolha Parâmetro e escolha RangeStart.
Para especificar a segunda condição, se você tiver selecionado é posterior na primeira condição, escolha é anterior ou igual a, ou, se você tiver selecionado é posterior ou igual a na primeira condição, escolha é anterior na segunda condição. Depois, escolha Parâmetro e escolha RangeEnd.
Importante: cerifique se as consultas têm um sinal de igual a (=) em RangeStart ou em RangeEnd, mas não em ambos. Se o sinal de igual a (=) existir em ambos os parâmetros, uma linha poderá atender às condições para duas partições, o que poderá levar a dados duplicados no modelo. Por exemplo,
= Table.SelectRows(#"Changed Type", each [OrderDate] >= RangeStart and [OrderDate] <= RangeEnd)
pode resultar em dados duplicados se houver um OrderDate igual a RangeStart e RangeEnd.Selecione OK para fechar.
Na faixa de opções Página Inicial no Editor do Power Query, selecione Fechar e Aplicar. O Power Query carrega os dados com base nos filtros definidos nos parâmetros RangeStart e RangeEnd e em qualquer outro filtro que você tiver definido.
O Power Query carrega apenas dados especificados entre os parâmetros RangeStart e RangeEnd. Dependendo da quantidade de dados nesse período, o carregamento da tabela deverá ser rápido. Se parecer lento, com uso intensivo de processos, é provável que a consulta não esteja dobrando.
Definir a política
Depois de definir os parâmetros RangeStart e RangeEnd e filtrar os dados com base neles, você definirá uma política de atualização incremental. Essa política só será aplicada após o modelo ser publicado no serviço e uma operação de atualização manual ou agendada ser executada.
Na exibição Dados, clique com o botão direito do mouse em uma tabela no painel Dados e selecione Atualização incremental.
Em Atualização incremental e dados em tempo real>Selecionar tabela, verifique ou selecione a tabela. O valor padrão da caixa de listagem Selecionar tabela é a tabela selecionada na exibição Dados.
Especifique as configurações necessárias:
Em Definir intervalos de importação e atualização>Atualizar incrementalmente esta tabela, mova o controle deslizante para Ativar. Se o controle deslizante está desabilitado, isso significa que a expressão do Power Query para a tabela não inclui um filtro baseado nos parâmetros RangeStart e RangeEnd.
Em Arquivar dados a partir de, especifique o período de armazenamento histórico que você deseja incluir no modelo. Todas as linhas com datas nesse período serão carregadas no modelo do serviço, a menos que outros filtros se apliquem.
Em Atualizar incrementalmente dados a partir de, especifique o período de atualização. Todas as linhas com datas nesse período serão atualizadas no modelo sempre que uma operação de atualização manual ou programada for executada pelo serviço do Power BI.
Especifique as configurações opcionais:
Em Escolher configurações opcionais, selecione Obter os dados mais recentes em tempo real com o DirectQuery (somente Premium) para incluir as alterações de dados mais recentes que ocorreram na fonte de dados após o último período de atualização. Essa configuração faz com que a política de atualização incremental adicione uma partição DirectQuery à tabela.
Selecione Atualizar somente dias completos para atualizar somente dias inteiros. Se a operação de atualização detectar que um dia não está completo, as linhas referentes a esse dia inteiro não serão atualizadas. Essa opção será habilitada automaticamente se você selecionar Obter os dados mais recentes em tempo real com o DirectQuery (somente Premium).
Selecione Detectar alterações nos dados, para especificar uma coluna de data/hora usada para identificar e atualizar somente os dias em que os dados foram alterados. Uma coluna de data/hora precisa existir, geralmente para fins de auditoria, na fonte de dados. Essa coluna não deve ser a mesma coluna usada para particionar os dados com os parâmetros RangeStart e RangeEnd. O valor máximo dessa coluna é avaliado para cada um dos períodos no intervalo incremental. Se não tiver sido alterado desde a última atualização, o período atual não será atualizado. Para modelos publicados em capacidades Premium, você também pode especificar uma consulta personalizada. Para saber mais, confira Atualização incremental avançada – Consultas personalizadas para detectar alterações de dados.
Dependendo de suas configurações, sua política deverá se parecer com a seguinte:
Examine suas configurações e selecione Aplicar para concluir a política de atualização. Esta etapa não carrega dados.
Salvar e publicar no serviço
Agora que os parâmetros RangeStart e RangeEnd estão sendo filtrados, e as configurações de política de atualização estão concluídos, salve o modelo e publique no serviço. Se o modelo se tornar grande, certifique-se de habilitar o formato de armazenamento de modelo grande antes de invocar a primeira atualização no serviço.
Atualizar modelo
Atualize o modelo no serviço. A primeira atualização carregará dados novos e atualizados no período de atualização, bem como dados históricos de todo o período de armazenamento. Dependendo da quantidade de dados, isso poderá levar muito tempo. Atualizações posteriores, manuais ou agendadas, normalmente são muito mais rápidas porque a política de atualização incremental é aplicada e somente dados do período especificado na configuração da política de atualização são atualizados.
Converter DateTime em inteiro
Essa tarefa só será necessária se a tabela usar chaves alternativas de inteiros em vez de valores de Data/Hora na coluna de data usada para a definição de filtro RangeStart e RangeEnd.
O tipo de dados dos parâmetros RangeStart e RangeEnd deve ser data/hora, independentemente do tipo de dados da coluna de data. No entanto, para muitas fontes de dados, as tabelas não têm uma coluna de tipo de dados de data/hora, e sim uma coluna de datas de chaves alternativas inteiras na forma de yyyymmdd
. Normalmente, você não pode converter essas chaves alternativas de inteiros para o tipo de dados Data/Hora porque o resultado seria uma expressão de consulta não dobrável, mas você pode criar uma função que converte o valor de data/hora em parâmetros que correspondam à chave alternativa de inteiros da tabela de fonte de dados sem perder a dobrabilidade. Em seguida, a função é chamada em uma etapa de filtro. Essa etapa de conversão será necessária se a tabela da fonte de dados contiver apenas uma chave alternativa como o tipo de dados Integer.
Na faixa de opções Página Inicial do Editor do Power Query, selecione a lista suspensa Nova Fonte e escolha Consulta em Branco.
Em Configurações da Consulta, insira um nome, por exemplo, DateKey, e, no editor de fórmulas, insira a seguinte fórmula:
= (x as datetime) => Date.Year(x)*10000 + Date.Month(x)*100 + Date.Day(x)
Para testar a fórmula, em Inserir Parâmetro, insira um valor de data/hora e clique em Invocar. Se a fórmula estiver correta, será retornado um valor inteiro para a data. Depois de verificar, exclua a nova consulta Função Invocada.
Em Consultas, selecione a tabela e edite a fórmula da consulta para chamar a função com os parâmetros RangeStart e RangeEnd.
= Table.SelectRows(#"Reordered Column OrderDateKey", each [OrderDateKey] > DateKey(RangeStart) and [OrderDateKey] <= DateKey(RangeEnd))