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.
No blog de hoje, exploraremos por que você não deve usar a função DAX para obter a média por categoria e fornecer algumas soluções alternativas para obter os mesmos resultados desejados. Você pode assistir ao vídeo completo deste tutorial na parte inferior deste blog .
Obter uma média por categoria no DAX é estranhamente complicado. Ao usar a função CALCULAR para resolver esses cálculos, os novos usuários do DAX podem achar o código DAX mais difícil de entender do que deveria. A boa notícia é que existem soluções mais simples para esse problema.
Índice
Visão geral da função CALCULAR DAX
Alguns meses atrás, apresentei no para LuckyTemplates. Chamava-se DAX Counterculture, onde forneci algumas visões alternativas sobre o DAX.
Uma das principais diz respeito ao uso da função CALCULAR. Falei sobre por que você não deve usar CALCULATE, especialmente se for novo no DAX.
CALCULAR é uma função realmente complexa de entender e usar. Ele faz certas suposições sobre seu modelo de dados e pode causar muitos problemas.
Também investiguei a medida rápida da Microsoft para Running Total porque ela não funciona em situações de tabela única e precisa de um esquema em estrela para funcionar corretamente.
Então, mostrei uma alternativa mais fácil que funciona seja um esquema em estrela ou um modelo de tabela única sem a necessidade de CALCULAR.
CALCULAR Fórmula DAX
Este blog se aprofundará em uma medida rápida chamada Média por categoria . Se você estiver na área de trabalho do LuckyTemplates, comece acessando o painel Campos e criando uma Nova medida rápida .
Na janela Quick Measure que aparecerá, escolha Average per category no menu suspenso Cálculo . Então, arraste ? Valor no campo de texto Valor base e Mês no campo Categoria .
Em seguida, clique em OK e você obterá um visual parecido com este.
No eixo x estão os trimestres - trimestre 1, 2, 3 e 4.
E o que você quer fazer é somar os valores de cada mês mostrados abaixo e, em seguida, tirar a média desses valores. Resumindo, a Média por Categoria, que é o tema do nosso blog.
Nosso modelo de dados para isso é muito simples. Temos uma tabela com Dates , Values gerados aleatoriamente e Month , MonthSort e Quarters em colunas separadas.
E temos a mesma coisa em nossa tabela de datas com Calendar Table, Month, MonthSort e Quarter. Isso significa que podemos escolher o Trimestre ou o Mês na tabela de datas ou na primeira tabela.
A boa notícia com Average Per Category é que ela realmente funciona independentemente de você ter um único modelo de tabela ou um esquema em estrela.
Nesses visuais, estamos usando a moeda da primeira mesa...
…enquanto este usa o Trimestre da nossa tabela de datas. Funciona de qualquer maneira.
Mas o problema com a média por categoria é simplesmente o código DAX.
Esse código DAX é estranho, porque mesmo que você seja um especialista em DAX, ele provavelmente o confundirá à primeira vista. É estranhamente construído com uma instrução CALCULATE sem nenhuma cláusula de filtro e apenas envolve uma instrução de soma.
Na verdade, é uma daquelas minhas irritações quando vejo pessoas nos fóruns que usam CALCULATE que apenas envolve uma soma sem motivo. Mas, neste caso, realmente tem um motivo.
Fico confuso sempre que os vejo, porque é apenas uma indicação imediata de que eles não têm ideia do que estão fazendo com a função CALCULAR. Então, eu recomendo apenas ficar longe disso.
Código DAX para média por categoria
O código DAX mostrado acima usa . Esta função não está em um segmento CALCULATE, o que novamente a torna estranha. Supostamente, esta função foi criada para uso em instruções CALCULATE com base em sua documentação.
O código também usa , com o qual não concordo. Eles nunca devem usar VALUES porque valores distintos tendem a retornar uma linha em branco se houver uma linha não correspondente. Isso pode causar muitos problemas, mas isso é assunto para outro vídeo.
Essencialmente, o que está acontecendo aqui é que eles estão usando uma função VALUES para obter todas as nossas categorias. Por exemplo, no trimestre 1, são janeiro, fevereiro e março. VALUES também retorna uma tabela, mas eles estão usando uma instrução KEEPFILTER para torná-la válida como primeiro parâmetro em .
Eles também mantêm a função CALCULATE para executar dentro do contexto de KEEPFILTERS. Devido à maneira como AVERAGEX funciona, ele pega a segunda expressão e a executa dentro do contexto da primeira expressão.
Qual é o problema, então?
No geral, funciona bem, mas não para alguém novo no DAX. Acredito que a Microsoft realmente perdeu o barco quando criou essa medida rápida porque as medidas rápidas são supostamente para pessoas novas no DAX.
Medidas rápidas são uma ótima ideia, como “Vamos escrever algumas medidas comuns com cálculos diferentes para você, porque você é novo no DAX e não sabe tudo o que há para saber sobre o DAX”. Mas por que eles os construiriam de maneiras tão estranhas e complicadas?
Como alguém novo no DAX deve dar uma olhada nisso e descobrir o que está acontecendo quando provavelmente os profissionais do DAX estão coçando a cabeça um pouco sobre este?
Então, para mim, eles perderam uma oportunidade de ouro de ajudar as pessoas a aprender DAX com suas medidas rápidas, insistindo que incluíssem CALCULAR e tendo que pular obstáculos para colocar o CALCULAR lá.
A solução mais fácil
Usando a função SUMMARIZE
Como mencionei anteriormente, há uma maneira melhor e mais simples de fazer isso.
Primeiro, crie uma variável de tabela usando VAR_Table . Em seguida, usaremos para pegar a Tabela, resumi-la por Mês, criar uma coluna Valor e somar nossos valores.
Finalmente, tiraremos a média de nossos valores usando a função AVERAGEX .
Este código é mais simples e muito mais lógico. Não inclui CALCULATE, que você não precisa de qualquer maneira.
Você pode encontrar um artigo de blog criticando o SUMMARIZE. O blog diz que a forma como o SUMMARIZE funciona internamente é bastante complicada.
Também sugere que você pode se meter em problemas em um caso específico, mas nunca se deparará com eles. Isso só aconteceria se o seu cálculo envolvesse um cálculo muito complexo e uma tabela muito grande. Só então SUMMARIZE lhe dará resultados instáveis.
Pelo menos é o que afirma o artigo do blog. E tudo bem se você quiser evitar SUMMARIZE. Nesse caso, use a função .
Usando a função GROUPBY
Ninguém tem problemas em usar a função GROUPBY, então vamos aprender como usá-la também. Novamente, crie uma variável Table usando VAR_Table. Em seguida, GROUPBY Month e criamos uma coluna Value.
Em seguida, aplicamos usando o CURRENTGROUP , que é como o GROUPBY funciona. Vamos somar nosso Value e novamente tirar o AVERAGEX sobre ele.
Nosso código deve ficar assim.
Comparando os resultados: funções SUMMARIZE x GROUPBY x CALCULATE DAX
Agora, vamos ver se os atalhos que fizemos retornam os mesmos resultados.
Como você pode ver nas imagens abaixo, SUMMARIZE rotulado como Melhor Média por Categoria e GROUPBY rotulado como Melhor Média por Categoria 2 retornam os mesmos números.
Ambas as nossas fórmulas retornam 3,4K para Q1, 3,6K para Q2, 3,4K para Q3 e 3,5K para Q4. E, novamente, eles trabalham em um único modelo de dados de tabela usando Quarters para nossa tabela.
Eles também funcionam em um esquema em estrela onde usamos Quarters em nossa tabela de datas.
Medidas rápidas – como usá-las em modelos do LuckyTemplates
usando a função Calcular dentro do LuckyTemplates
Maneiras eficazes de usar a função GROUPBY no LuckyTemplates
Conclusão
Não precisamos nos forçar a uma lógica de contexto distorcida apenas para inserir CALCULAR em nossas fórmulas. Basta usar funções DAX padrão simples e você poderá obter as mesmas coisas.
Na verdade, provavelmente em 80% – 90% dos casos, não há absolutamente nenhuma razão para se preocupar em usar CALCULATE para qualquer coisa. Em vez disso, você pode usar as funções SUMMARIZE e GROUPBY, que são mais simples e lógicas.
Se você quiser explorar este arquivo PBIX, já o publiquei na Quick Measures Gallery e nomeei o arquivo Better Average Per Category . Basta rolar a página para baixo para encontrar o arquivo PBIX que você pode baixar e brincar com você mesmo.
Tudo de bom,
Greg Deckler
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.