Modo DirectQuery (SSAS tabular)
O Analysis Services permite criar relatórios e modelos de tabela que recuperam dados e agregações diretamente em um sistema de banco de dados relacional, usando o modo DirectQuery. Os benefícios do uso do modo DirectQuery geralmente mencionados são a capacidade de consultar conjuntos de dados muito grandes que não cabem na memória e a atualização dos dados em tempo real.
Este tópico apresenta as diferenças entre modelos de tabela padrão que só residem na memória e modelos de tabela que podem consultar uma fonte de dados relacional, e também explica como você pode criar e implantar um modelo para usar no modo DirectQuery.
Seções neste tópico:
Visão geral do modo DirectQuery
Criando modelos para uso no modo DirectQuery
Fontes de dados para modelos DirectQuery
Validação e restrições de design para o modo DirectQuery
Compatibilidade de fórmulas
Conectando a modelos DirectQuery
Segurança
Propriedades DirectQuery
Tópicos relacionados e tarefas
Visão geral do modo DirectQuery
Por padrão, modelos de tabela usam um cache na memória para armazenar e consultar dados. Como modelos de tabela usam dados que residem na memória, até mesmo consultas complexas podem ser inacreditavelmente rápidas. Contudo, o uso de dados armazenados em cache apresenta algumas desvantagens:
Os dados não são atualizados quando os dados de origem são alterados. Processe o modelo para obter atualizações nos dados.
Quando você desativar o computador que hospeda o modelo, o cache será salvo em disco e deverá ser reaberto quando você carregar o modelo ou abrir o arquivo do PowerPivot. As operações de salvamento e carregamento podem ser demoradas.
Por outro lado, um modelo de tabela no modo DirectQuery usa dados que estão armazenados em um banco de dados do SQL Server ou em um data warehouse do SQL Server PDW. Em tempo de design, você importa todos os dados ou uma pequena amostra dos dados para o cache e cria seu modelo como de costume. Quando você estiver pronto para implantar o modelo, altere o modo de operação para DirectQuery. Depois que você alterar o modo de operação, todas as consultas feitas com base no modelo usarão a fonte de dados relacional especificada (SQL Server ou SQL Server PDW), e não os dados armazenados em cache.
Ao criar relatórios ou consultas com base no modelo, você usará o DAX, mas as consultas DAX são convertidas pelo Analysis Services em instruções Transact-SQL equivalentes.
Há muitas vantagens em implantar um modelo usando o modo DirectQuery:
É possível ter um modelo sobre conjuntos de dados que são muito grandes para caber na memória no servidor do Analysis Services.
Os dados são certamente atualizados e não há sobrecarga de gerenciamento adicional pela manutenção de uma cópia separada dos dados. As alterações nos dados de origem subjacentes podem ser refletidas imediatamente em consultas no modelo de dados.
O DirectQuery pode aproveitar a aceleração de consulta no lado do provedor, como a fornecida por índices columnstore xVelocity de memória otimizada. Os índices columnstore xVelocity são fornecidos no SQL Server 2012 e no SQL Server PDW para que o DirectQuery ofereça um desempenho melhor.
Qualquer segurança imposta pelo banco de dados back-end é certamente imposta, usando a segurança em nível de linha. Em contraste, se você estiver usando dados armazenados em cache, talvez encontre dificuldade em garantir que o cache esteja protegido exatamente da mesma forma que no servidor.
Se o modelo contiver fórmulas complexas que possam exigir várias consultas, o Analysis Services poderá executar a otimização para garantir que o plano de consulta da consulta executado no banco de dados back-end seja o mais eficiente possível.
Criando modelos para o modo DirectQuery
Todos os modelos de tabela são criados através do designer de modelos no SSDT (SQL Server Data Tools), que, por padrão, sempre cria modelos na memória. Isso significa que, se você estiver trabalhando com dados que são muito grandes para caber na memória, deverá planejar o uso de um subconjunto de dados menor durante o tempo de design e acessar a fonte de dados completa somente depois que o modelo for implantado. Há várias maneiras de trabalhar com um subconjunto de dados menor:
Quando você adicionar dados ao modelo usando o Assistente de Importação de Tabela, use um filtro para importar apenas um subconjunto dos dados para o cache usado pelo banco de dados de espaço de trabalho. Depois que você implantar o modelo, poderá editar a definição da consulta para remover ou alterar o filtro.
Use uma fonte de dados de preparo, e crie o modelo enquanto as tabelas de preparo contiverem apenas um subconjunto dos dados.
Adicione partições às tabelas para gerenciar a quantidade de dados que precisa ser processada a qualquer momento.
Quando você estiver pronto para alternar para o modo DirectQuery, pode alterar uma propriedade que habilita o modo DirectQuery. Para obter mais informações, consulte Habilitar o modo de design de DirectQuery (SSAS tabular).
Quando você fizer isso, o designer de modelo configurará automaticamente o banco de dados de espaço de trabalho para execução em um modo híbrido que permite continuar trabalhando com os dados armazenados em cache. O designer de modelo também o notificará sobre qualquer recurso em seu modelo que seja incompatível com o modo DirectQuery. A seguinte lista resume os requisitos principais a serem considerados:
Fontes de dados: os modelos DirectQuery só podem usar dados de uma única fonte de dados relacional. A fonte pode ser uma instância do SQL Server ou uma instância do SQL Server PDW. Depois que o modo DirectQuery for ativado para o modelo, você não poderá usar outros tipos de dados no designer de modelos, incluindo as tabelas adicionadas pelas operações de cópia e colagem. Todas as outras opções de importação são desabilitadas. Além disso, qualquer tabela incluída em uma consulta deve fazer parte da fonte de dados especificada. Consulte Fontes de Dados para obter mais informações.
Suporte a colunas calculadas: as colunas calculadas não têm suporte em modelos DirectQuery. Porém, você pode criar medidas e KPIs que operam em conjuntos de dados. Consulte a seção sobre validação para obter mais informações.
Uso limitado de funções DAX: algumas funções DAX não podem ser usadas no modo DirectQuery; portanto, você deve substituí-las por outras funções ou criar os valores usando colunas derivadas na fonte de dados. O designer de modelo oferece validação em tempo de design para qualquer erro que ocorra quando você cria fórmulas que são incompatíveis com o modo DirectQuery. Consulte as seguintes seções para obter mais informações: Validação.
Compatibilidade de fórmula: em determinados casos conhecidos, a mesma fórmula pode retornar resultados diferentes em um modelo em cache ou modelo híbrido se comparado a um modelo DirectQuery que usa apenas o repositório de dados relacional. Essas diferenças são uma consequência das diferenças semânticas entre o mecanismo analítico na memória xVelocity (VertiPaq) e o SQL Server. Para obter mais informações sobre essas diferenças, consulte esta seção: Compatibilidade de fórmula.
Segurança: Você pode usar métodos diferentes para proteger os modelos, dependendo de como eles são implantados. Dados armazenados em cache para modelos de tabela são protegidos através do modelo de segurança da instância do Analysis Services. Os modelos DirectQuery podem ser protegidos através da funções, mas você também pode usar a segurança definida no repositório de dados relacional. O modelo pode ser configurado para que os usuários que abrem um relatório baseado em um modelo apenas DirectQuery podem ver apenas os dados aos quais têm permissão no SQL Server. Consulte esta seção para obter mais informações: Segurança.
Restrições de cliente: Quando um modelo estiver em modo DirectQuery, só poderá ser consultado usando DAX. Você não pode usar MDX para criar consultas. Isso significa que você não pode usar o Cliente Dinâmico do Excel porque o Excel usa MDX.
Porém, você poderá criar consultas em um modelo DirectQuery no SQL Server Management Studio se usar uma consulta de tabela DAX como parte de uma instrução XMLA Execute. Para obter mais informações, consulte Referência de sintaxe na consulta DAX.
Quando você tiver resolvido todos os problemas de design e testado seu modelo, estará pronto para a implantação. Neste momento, você pode definir o método preferencial para responder consultas em relação ao modelo. Você deseja que os usuários tenham acesso ao cache ou que sempre usem apenas a fonte de dados relacional?
Se você implantar o modelo em um modo híbrido, o cache ainda estará disponível e poderá ser usado para consultas. Um modo híbrido oferece várias opções:
Quando o cache e a fonte de dados relacional estiverem disponíveis, você poderá definir o método de conexão preferencial, mas é o cliente quem controla a fonte a ser usada, usando a propriedade de cadeia de conexão do DirectQueryMode.
Você também pode configurar partições no cache de tal um modo que a partição primária usada no modo DirectQuery nunca seja processada e sempre referencie a fonte relacional. Há muitas formas de usar partições para otimizar o design de modelo e a experiência de relatórios. Para obter mais informações, consulte Partições e modo DirectQuery (SSAS tabular).
Após a implantação do modelo, você pode alterar o método de conexão preferencial. Por exemplo, você pode usar um modo híbrido para testes e alternar o modelo para apenas DirectQuery somente depois de testar bem relatórios ou consultas que usam o modelo. Para obter mais informações, consulte Definir ou alterar o método de conexão preferencial para DirectQuery.
Fontes de dados para modelos DirectQuery
Assim que você alterar o ambiente de design para habilitar o modo DirectQuery, as fontes de dados do banco de dados de espaço de trabalho serão validadas para garantir que são provenientes de uma única fonte de dados relacional. Dados de outras fonte, inclusive dados copiados e colados, não são permitidos em modelos DirectQuery.
Se você pretende usar o modelo no modo DirectQuery, verifique se todos os dados necessários à geração de relatórios estão armazenados na fonte de dados especificada. Se os dados necessários à modelagem não estiverem disponíveis nessa fonte, considere o uso do Integration Services ou de outras ferramentas de data warehousing para importar os dados para o banco de dados ou o data warehouse que serve como fonte de dados DirectQuery.
Validação e restrições de design para o modo DirectQuery
Quando você criar um modelo para usar no modo DirectQuery, carregue inicialmente uma parte dos dados no cache. Se os dados que você ainda usará forem muito grandes para caber na memória, você poderá usar a opção Visualizar e Filtrar no Assistente de Importação de Tabela para selecionar um subconjunto de dados ou gravar um script SQL para obter os dados desejados. Outra opção é preparar um subconjunto dos dados em um data warehouse e, em seguida, aumentar o repositório de dados depois que a fase de design for concluída.
Cuidado |
---|
Como o modo DirectQuery não oferece suporte ao uso de colunas calculadas, você deve remover todas as colunas calculadas. Você pode converter algumas colunas calculadas em medidas, mas em outros casos, você pode criar colunas derivadas como parte do script ou da consulta de importação de dados, ou adicioná-las à fonte de dados relacional. |
Para exibir e resolver erros de validação, abra a Lista de Erros no SQL Server Data Tools. Erros críticos que impedem o uso do modo DirectQuery são exibidos na guia Erros. Você deve corrigir estes erros antes de alterar a modo DirectQuery. Os erros de validação com maior dificuldade de solução costumam estar relacionados a fórmulas sem suporte no modo DirectQuery. Consulte a seção, Compatibilidade de Fórmula, para obter uma visão geral de erros relacionados a fórmulas e colunas calculadas.
A seguinte lista descreve outras considerações ao criar um modelo para acesso do DirectQuery:
Quando estiver no modo apenas DirectQuery, os resultados em um relatório podem variar de acordo com o contexto de segurança do usuário que está exibindo os resultados. Você deve testar modelos com credenciais diferentes para garantir que usuários obtenham os resultados esperados.
Se você configurar um modelo para funcionar no modo híbrido, o que permite o uso do cache ou dos dados da fonte de dados relacional, saiba que há a possibilidade de os clientes receberem resultados diferentes, dependendo do modo especificado na cadeia de conexão. Se você precisar garantir que os usuários do relatório vejam apenas os dados provenientes da fonte relacional, limpe o cache ou altere o modelo para DirectQueryOnly.
Compatibilidade de fórmulas para modelos DirectQuery
Alguns modelos podem conter fórmulas sem suporte no modo DirectQuery e o modelo deve ser reformulado para impedir erros de validação. Restrições em fórmulas sem suporte no modo DirectQuery incluem o seguinte:
Colunas calculadas não têm suporte em modelos de tabela com o modo DirectQuery habilitado, nem mesmo em modelos híbridos. Se você precisar de colunas calculadas para um modelo, pense na possibilidade de convertê-las em colunas derivadas usando o Transact-SQL em sua definição de importação.
Modelos DirectQuery não oferecem suporte ao uso de fórmulas DAX em medidas, que são convertidas em operações baseadas em conjunto no repositório de dados relacional. Há suporte também para todas as medidas que você pode criar usando medidas implícitas.
Nem todas as funções têm suporte. Como o Analysis Services converte todas as fórmulas DAX e definições de medida em instruções SQL ao consultar um modelo DirectQuery, qualquer fórmula contendo os elementos que não podem ser convertidos em Transact-SQL disparará erros de validação no modelo. Por exemplo, funções de inteligência de dados temporais não têm suporte. Até mesmo funções com suporte podem apresentar outro comportamento, como as funções estatísticas. Para obter uma lista completa de problemas de compatibilidade, consulte Compatibilidade de fórmulas no modo DirectQuery.
Algumas fórmulas no modelo podem ser validadas quando você alterna o modelo para o modo DirectQuery, mas retornam resultados diferentes quando executadas no cache versus o repositório de dados relacional. Isso ocorre porque cálculos em relação ao uso de cache usam a semântica do mecanismo analítico na memória xVelocity (VertiPaq), que contém muitos recursos que visam emular o comportamento do Excel, enquanto consultas a dados armazenados no repositório de dados relacional necessariamente usam a semântica do SQL Server. Para obter uma lista de funções DAX que podem retornar resultados diferentes quando o modelo é implantado em tempo real, consulte Compatibilidade de fórmulas no modo DirectQuery.
Conectando a modelos DirectQuery
Clientes que usam MDX como a linguagem de consulta não podem se conectar a modelos que usam o modo DirectQuery. Se você tentar criar uma consulta MDX em um modelo DirectQuery, receberá um erro informando que o cubo não pode ser encontrado ou não foi processado. Você pode criar consultas em modelos DirectQuery usando o Power View, fórmulas DAX ou consultas XMLA. Para obter mais informações sobre como você pode executar consultas ad hoc em modelos de tabela, consulte Acesso a dados de modelo de tabela.
Se você estiver usando um modelo híbrido, poderá especificar se os usuários se conectarão ao cache ou usarão dados do DirectQuery especificando a propriedade de cadeia de conexão DirectQueryMode.
Segurança no modo DirectQuery
Durante a criação de modelos, você especifica as permissões que são usadas para recuperar os dados de origem. Isso geralmente será suas próprias credenciais ou uma conta usada para desenvolvimento. Porém, quando você alterna o modelo para usar o modo DirectQuery, o contexto de segurança é mais complexo:
Considere se os usuários têm o nível necessário de acesso aos dados no repositório de dados relacional.
Usuários que exibem o mesmo modelo ou relatório podem ver dados diferentes, dependendo do contexto de segurança do usuário.
Se o cache de modelo foi preservado, o cache será protegido usando o modelo de segurança (funções) do Analysis Services. O cache pode conter dados que o designer de modelo tem o privilégio de visualizar, mas não o usuário. Designers de modelo ou relatório devem limpar o cache ou proteger esses dados controlando o acesso por meio de funções.
Um modelo que responde consultas do cache não pode representar o usuário atual ao conectar-se à fonte de dados. Se você desejar representar o usuário atual ao conectar-se à fonte de dados, deverá usar o modo DirectQuery.
Se seu modelo de relatório exige segurança, você tem duas opções: pode usar funções Analysis Services ou definir permissões em nível de linha na fonte de dados. A segurança na fonte de dados relacional é usada para controlar o acesso a tabelas e a segurança em nível de coluna não tem suporte. Portanto, se os usuários em uma região não tiverem permissão para exibir valores de vendas de regiões diferentes, um relatório que inclua uma medida baseada na tabela Vendas retornará espaços em branco ou um erro.
A propriedade das configurações de representação especifica as credenciais usadas quando você está se conectando a um modelo usando DirectQuery, para um modelo somente DirectQuery ou para um modelo híbrido que responde consultas usando DirectQuery. A propriedade tem os valores seguintes:
Padrão
Usa as credenciais especificadas no assistente de importação para conectar-se à fonte de dados. Isso pode ser um usuário específico do Windows ou uma conta de serviço.ImpersonateCurrentUser
Usa as credenciais do usuário atual para conectar-se à fonte de dados.
Para obter informações sobre como definir essas propriedades, consulte Cenários de implantação do DirectQuery (SSAS tabular).
Propriedades DirectQuery
A tabela a seguir lista as propriedades que você pode definir no SQL Server Data Tools e no SQL Server Management Studio para habilitar o DirectQuery e controlar a origem de dados usada em consultas no modelo.
Nome da propriedade |
Descrição |
---|---|
Propriedade DirectQueryMode |
Esta propriedade habilita o uso do modo DirectQuery no designer de modelo. Você deve definir esta propriedade como On para alterar qualquer outra propriedade DirectQuery. Para obter mais informações, consulte Habilitar o modo de design de DirectQuery (SSAS tabular). |
Propriedade QueryMode |
Esta propriedade especifica o método de consulta padrão de um modelo DirectQuery. Você define esta propriedade no designer de modelos ao implantar o modelo, mas pode substituí-la posteriormente. A propriedade tem estes valores:
Para obter mais informações, consulte Definir ou alterar o método de conexão preferencial para DirectQuery. |
Propriedade DirectQueryMode |
Depois que o modelo for implantado, você poderá alterar a fonte de dados de consulta preferencial para um modelo DirectQuery, alterando esta propriedade no SQL Server Management Studio Como a propriedade anterior, esta propriedade especifica a fonte de dados padrão para o modelo e tem estes valores:
Para obter mais informações, consulte Definir ou alterar o método de conexão preferencial para DirectQuery. |
Propriedade Impersonation Settings |
Esta propriedade define as credenciais usadas na conexão com a fonte de dados relacional no momento da consulta. Você pode definir esta propriedade no designer de modelo e alterar o valor posteriormente, depois da implantação do modelo. Observe que estas credenciais são usadas apenas para responder consultas no repositório de dados relacional; elas não são iguais às credenciais usadas para processar o cache de um modelo híbrido. A representação não pode ser usada quando o modelo é usado apenas na memória. A configuração ImpersonateCurrentUser é inválida, a menos que o modelo esteja usando o modo DirectQuery. |
Além disso, se seu modelo incluir partições, escolha uma partição para usar como a fonte de consultas no modo DirectQuery. Para obter mais informações, consulte Partições e modo DirectQuery (SSAS tabular).
Tópicos relacionados e tarefas
Tópico |
Descrição |
---|---|
Descreve como as partições são usadas em modelos configurados para o modo DirectQuery. |
|
Descreve restrições e requisitos de compatibilidade nas fórmulas que você pode usar em modelos configuradas para o modo DirectQuery. |
|
Descreve como você pode alterar o ambiente de tempo de design para que ele ofereça suporte ao uso do modo DirectQuery. |
|
Descreve como alterar a partição do DirectQuery. |
|
Definir ou alterar o método de conexão preferencial para DirectQuery |
Descreve como definir ou alterar o método de conexão para modelos configurados para DirectQuery. |
Descreve cenários de implantação do DirectQuery. |
|
Configure o Acesso Na Memória ou DirectQuery para um banco de dados modelo de tabela |
Descreve algumas configurações comuns do DirectQuery. |
Explica como limpar o cache do modelo de tabela. |