Ir para conteúdo
  • 0

Coluna Personalizada com função IF


suelenbn
Ir para solução Solucionado por Vitor Peralva ,

Pergunta

  • Alunos

Pessoal, meu modelo tem uma tabela fato onde preciso criar 02 colunas condicionais.  Precisa ser coluna pois uso como eixo em visuais.

Fiz em DAX

1° coluna:

Escalation = 
if ([WF_ATUAL_PT ]<> "00-No_Prazo",  [WF_ATUAL_PT],
IF([Requirement Date] >NOW()+30,"0.0_A vencer + 30 dias",
IF([Requirement Date] >NOW()+15,"0.1_A vencer 30 dias", "0.2_A vencer 15 dias")))

 

2° coluna:

Dias = 
if([Requirement Date]<>BLANK(),
if([Requirement Date]<now(),"Vencido",
if([Requirement Date]<=now()+7,"0 a 7 dias",
if([Requirement Date]<=now()+15,"8 a 15 dias",
if([Requirement Date]<=now()+30,"16 a 30 dias",
if([Requirement Date]<=now()+60,"31 a 60 dias",
if([Requirement Date]>now()+60,"> 60 dias","")))))),"s/ data")

 

Em DAX o modelo está ficando um pouco pesado, então decidi excluir essas colunas e criar novas no power query com a linguagem M. Criei 03 colunas personalizadas:

1° Hoje =
Table.AddColumn(#"Colocar Cada Palavra Em Maiúscula", "Hoje", each
Date.From(DateTime.LocalNow()), type date)

 

2° Escalation =
Table.AddColumn(#"Personalização Adicionada", "Escalation", each
if [WF_ATUAL_PT] <> "00-No_Prazo" then [WF_ATUAL_PT] else 
if [Requirement Date] = null
then "s/data" else


if [Requirement Date] > Date.AddDays([Hoje], 30) 
then "0.1. a vencer + 30 dias" else


if [Requirement Date] > Date.AddDays([Hoje], 15)
then "0.2. a vencer 30 dias" else
"0.3. a vencer 15 dias", type text)

 

3° Dias = 
Table.AddColumn(#"Personalização Adicionada1", "Dias", each
if [Requirement Date] = null then "s/data" else
if [Requirement Date] < [Hoje] then "Vencido" else
if [Requirement Date] <= Date.AddDays([Hoje], 7) then "0 a 7 dias" else
if [Requirement Date] <= Date.AddDays([Hoje], 15) then "8 a 15 dias" else
if [Requirement Date] <= Date.AddDays([Hoje], 30) then "16 a 30 dias" else
if [Requirement Date] <= Date.AddDays([Hoje], 60) then "31 a 60 dias" else
if [Requirement Date] > Date.AddDays([Hoje], 60) then ">60 dias" else "avaliar", type text)

 

Da certo, porém, quando fecho e aplico a alteração, está demorando muito para carregar, e acabo cancelando pq parece que nunca vai terminar.

Todas as bases de dados do modelo são em excel, e hoje ele está com o tamanho de 1.253 KB.

Tem como otimizar essa medida da linguagem M ou nesse caso é melhor usar DAX mesmo?

Editado por suelenbn
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Como o nosso grande colega @Bruno Abdalla de Souza já adiantou, olhando rapidamente a questão apresentada, não haveria a necessidade de se criar uma coluna de hoje, já que este cálculo poderia ser introduzido dentro da fórmula da coluna personalizada.
Acredito que se você colocar na coluna personalizada algo como a expressão abaixo, ficaria mais simples:

 

let

DifData = Duration.Days([Requirement Date] - Date.From(DateTime.LocalNow()),

Calculo =
if [Requirement Date] = null then "s/data" else
if DifData < 0 then "Vencido" else
if DifData <= 7 then "0 a 7 dias" else
if DifData <= 15 then "8 a 15 dias" else
if DifData <= 30 then "16 a 30 dias" else
if DifData <= 60 then "31 a 60 dias" else
">60 dias"

in

Calculo

 

A ideia por trás é simples, quando menos cálculos forem necessários, em tese, mais rápido será feita a tarefa.

Você poderia, ainda, colocar em uma dimensão estes prazos e colocar só o código como resultado.

Talvez fazendo assim e usando o resultado desta para criar a sua coluna de "Escalation", seria melhor.

De toda forma, teste para ver aquilo que te entrega resultados melhores.


 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Penso que não há necessidade de criar a coluna Hoje. A data de hoje você pode colocar em uma etapa (Date.From(DateTime.LocalNow()), depois criar outras etapas para calcular os dias a mais (Date.AddDays([Hoje], 7), etc), pois são valores que não mudam a cada linha, logo você não precisa recalcular isso a cada linha. Neste caso o uso de variáveis, seja no PowerQuery ou via DAX é muito bem-vindo.
O que é melhor? Em geral devemos buscar o POwerQuery, mas há casos em que via DAX fica mais performático. 

Caso necessário, anexe um exemplo com dados ficíticios em pbix para que possamos lhe ajudar a otimizar este cálculo.

 

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...