Colunas calculadas no SharePoint | Uma visão geral
Descubra a importância das colunas calculadas no SharePoint e como elas podem realizar cálculos automáticos e obtenção de dados em suas listas.
Hoje, quero falar sobre um conceito de modelagem de dados chamado dimensão de lixo . Pelo nome, você pensaria que é uma técnica depreciativa e algo que você gostaria de evitar, mas na verdade é uma abordagem útil.
Na verdade, trabalhei em uma pergunta do e uma dimensão de lixo foi a solução perfeita para isso. Depois de vê-lo e entendê-lo, você encontrará muitas aplicações para ele em seu próprio trabalho. Você pode assistir ao vídeo completo deste tutorial na parte inferior deste blog.
Índice
Quais são as dimensões do lixo?
O Data Warehouse Toolkit de Kimball e Ross , uma das bíblias da modelagem dimensional, a define como o agrupamento de flags e indicadores tipicamente de baixa cardinalidade . Baixa cardinalidade significa um pequeno número de observações únicas dentro de um determinado campo.
Em nosso exemplo, temos um modelo de dados para nosso negócio de construção de PCs personalizados. O modelo de dados refere-se a pedidos e faturas. Temos também uma série de flags onde podemos capturar o tipo de processador , tipo de configuração da torre (Compacta ou Full) e finalidade (Gaming ou Workstation).
Definindo as dimensões do lixo usando a analogia da gaveta do lixo da cozinha
Se você olhar para cada um desses campos, há apenas duas observações únicas em cada campo. Isso é o que Kimball chamaria de sinalizador de baixa cardinalidade . Ele diz que, ao criar uma dimensão abstrata, removemos sinalizadores da tabela de fatos enquanto os colocamos em uma estrutura dimensional útil.
A analogia da gaveta de lixo da cozinha para uma dimensão de lixo é boa. Todo mundo tem uma gaveta cheia de elásticos, grampos, pilhas, velas de aniversário, etc. Não é importante que nenhuma dessas coisas justifique ter sua própria gaveta, mas você precisa ter um lugar para colocá-las.
Mantê-los pode fazer com que a tabela de fatos aumente de tamanho. Digamos que temos uma tabela de fatos com um milhão de registros. Construímos muitos computadores e, para cada computador que construímos, temos que sinalizar o processador, a torre e a finalidade. Isso significa que, para um milhão de linhas de PCs encomendados, também temos 3 milhões de sinalizadores na tabela de fatos.
Reduzindo o tamanho da tabela de fatos
Poderíamos movê-los para uma tabela de dimensões e vinculá-los apenas ao ID do modelo para remover os 3 milhões de sinalizadores da tabela de fatos. Para fazer isso, podemos fazer uma tabela separada para cada um desses sinalizadores e funcionará. Mas esse processo complicará o modelo de dados, onde você normalmente deseja evitar tabelas de coluna única.
A solução ideal é usar uma dimensão de lixo , onde você tem um monte de sinalizadores de baixa cardinalidade relacionados de maneira geral. Todos eles estão relacionados aos atributos dos computadores que estamos construindo, mas não de uma maneira realmente direta que você normalmente teria para uma tabela de dimensão específica.
Revendo o problema do membro do fórum
Vamos dar uma olhada no aplicativo específico que foi postado no fórum. O membro queria criar dois campos diferentes, um para Stalled e outro para Active . Se o cliente realizou uma transação nos últimos 45 dias, ela é sinalizada como ativa; caso contrário, ele será sinalizado como parado.
O membro também queria outra tabela de dimensão para o tipo de cliente, que é de vários pedidos ou pedido único. Se a conta tiver duas ou mais transações em qualquer ponto do histórico usando um único número de conta, isso será considerado um cliente multiordem. E se eles tivessem apenas um pedido para um determinado número de conta, seria um cliente de pedido único.
Então essas são as duas bandeiras que queremos desenvolver. Vamos pular para o LuckyTemplates e descobrir como fazer isso.
Modelagem de dados para a dimensão lixo
Vamos dar uma olhada no modelo de dados. É um modelo de dados realmente simples. Temos nossa tabela estendida de datas e tabela de transações .
Nossa tabela de transações possui apenas três campos: um número de conta , data da fatura e quantidade de vendas .
Geralmente, se pudermos empurrar a transformação para mais perto da fonte, faremos isso. Isso não é dinâmico durante uma sessão de relatório, então não precisamos fazer isso no DAX .
Devemos fazê-lo em power query ou data warehouse/SQL se tivermos essa opção. Mas, por enquanto, vamos supor que não e que estamos apenas fazendo isso em power query .
Identificando o tipo de cliente para a dimensão lixo
A primeira coisa que faremos é descobrir o tipo de cliente, se é uma transação de pedido único ou de vários pedidos. Usaremos Group By , Count e Count Rows .
Em seguida, adicione todos os dados e torne-a uma operação All Rows para que não retornemos a tabela agregada, mas a tabela inicial com essa contagem de linha em cada linha.
Vamos dar uma olhada no resultado e expandi-lo.
Podemos adicionar uma coluna personalizada e nomeá-la como Client Type e, em seguida, criar uma instrução IF. A instrução é se Count for igual a 1, então é uma única ordem; caso contrário, é multiordem.
Vamos apenas alterar a coluna para um tipo de texto. Agora, temos uma de nossas duas dimensões definidas na tabela de fatos.
Vamos fazer a tabela da segunda dimensão. Para este, se o pedido mais recente for 45 dias ou menos a partir da data de hoje, o cliente será visto como ativo. Se não houver pedido dentro de 45 dias a partir de hoje, o cliente está inativo.
Adicionaremos uma coluna personalizada e nomearemos a coluna como Today . Em seguida, adicione DateTime.LocalNow para fornecer a data e a hora atuais e Date.From para fornecer apenas a parte da data.
Vamos apenas mudar isso para um tipo de dados de data e, em seguida, mover a coluna para a frente.
Existe uma maneira simples de criar uma subtração entre as duas colunas de datas. Basta destacar essas duas datas, clicar em Datas na faixa de opções e clicar em Subtrair dias .
Isso lhe dará a diferença entre essas duas datas em termos de número de dias. Vamos nomear esta nova coluna de Dias Antes de Hoje.
O próximo passo é encontrar os dias mínimos anteriores a hoje, o que significa o pedido mais recente para cada número de conta. Se esse número for menor ou igual a 45, ele está ativo.
Vamos fazer outro Group By , Advanced , Account Number .
Novamente, usaremos todos os dados para o novo nome da coluna e todas as linhas para a operação.
Desta vez, adicionaremos o Minimum Days Between com Minimum como sua operação e Days Before to Today como sua coluna. Isso nos dará o pedido mais recente.
Em seguida, expandimos Todos os dados e removemos o Número da conta .
Assim que expandirmos isso, teremos o Minimum Days Between para os números de conta.
Por fim, adicionaremos outra coluna personalizada e a chamaremos de Client Timing . Colocaremos um parâmetro hipotético em que, se Min Days Between for menor ou igual a 45, ele será Active ou Stalled .
Removendo as colunas desnecessárias
Como agora temos muitas colunas de suporte, vamos clicar em Choose Columns e retirar as que não precisamos.
Estaremos removendo as colunas Count , Today , Days Before to Today e Min Days Between . Agora temos apenas a tabela de fatos original, mais as colunas Client Type e Client Timing .
Em vez de mantê-los na tabela de fatos, vamos duplicar esta tabela.
Chamaremos a tabela duplicada de Account Flags .
Vamos voltar para a tabela Transações e remover os campos Tipo de cliente e Tempo do cliente .
Agora temos a tabela de fatos original e a tabela de sinalizadores de conta.
Para a tabela Account Flags, não precisamos dos campos Client Type e Client Timing , então os removemos. Apenas destacamos todos esses campos, removemos linhas e removemos duplicatas.
Agora temos nossa tabela de dimensões de lixo. Tudo o que resta é clicar em Fechar e Aplicar . A próxima etapa é conectar o número da conta de nossa tabela de sinalizadores de conta ao número da conta em nossa tabela de transações .
Temos um relacionamento um-para-muitos entre a tabela Transactions (que é nossa tabela de fatos) e a tabela Account Flags (que é nossa tabela de dimensões de lixo).
Construindo seus relacionamentos de modelo de dados no LuckyTemplates
Modelagem de dados no LuckyTemplates: dicas e práticas recomendadas
Conclusão
Vamos soltar as dimensões Client Timing e Client Type em nossa tela e transformá-las em segmentações. Agora podemos fazer exatamente o que o membro queria fazer inicialmente, que é fatiar com base nesses atributos.
Se clicarmos em Multi-Order, nos deixará apenas com aqueles que têm vários pedidos e se formos em Single-Order, nos deixará com aqueles que têm uma compra.
Para resumir, isso é basicamente o que é uma dimensão de lixo e como você pode criá-la. Essa é uma técnica muito útil se você tiver um monte de sinalizadores variados de baixa cardinalidade que deseja incorporar em seu modelo de dados de maneira eficiente.
A técnica de agrupar por todas as linhas é extremamente útil para criar essas dimensões inúteis. Espero que você tenha achado isso útil e como sempre.
Descubra a importância das colunas calculadas no SharePoint e como elas podem realizar cálculos automáticos e obtenção de dados em suas listas.
Descubra todos os atributos pré-atentivos e saiba como isso pode impactar significativamente seu relatório do LuckyTemplates
Aprenda a contar o número total de dias em que você não tinha estoque por meio dessa técnica eficaz de gerenciamento de inventário do LuckyTemplates.
Saiba mais sobre as exibições de gerenciamento dinâmico (DMV) no DAX Studio e como usá-las para carregar conjuntos de dados diretamente no LuckyTemplates.
Este tutorial irá discutir sobre Variáveis e Expressões dentro do Editor do Power Query, destacando a importância de variáveis M e sua sintaxe.
Aprenda a calcular a diferença em dias entre compras usando DAX no LuckyTemplates com este guia completo.
Calcular uma média no LuckyTemplates envolve técnicas DAX para obter dados precisos em relatórios de negócios.
O que é self em Python: exemplos do mundo real
Você aprenderá como salvar e carregar objetos de um arquivo .rds no R. Este blog também abordará como importar objetos do R para o LuckyTemplates.
Neste tutorial de linguagem de codificação DAX, aprenda como usar a função GENERATE e como alterar um título de medida dinamicamente.