EN AÑADIR COLUMNA: ¿La función DIVIDE () con dos columnas produce un resultado incorrecto?

Un usuario Pregunto ✅

JuanLap

¡Soy nuevo! ¡Probablemente me estoy perdiendo algo obvio! Pero después de 12 horas de tratar de resolver esto, necesito ayuda.

Versión más reciente de Power BI Desktop. Solo quiero dividir dos columnas numéricas. Cuando hago las MATEMÁTICAS están fallando. ¡He intentado esto de todas las formas que puedo encontrar, sin alegría!

Las matemáticas específicas en este ejemplo para la fila 1:
2867 / 3159 = 0.90756568 (usando una calculadora)

Según tengo entendido, este debería ser un cálculo fila por fila para esta vista.

CountTest6 = DIVIDE(‘YoY_Daily_Sales'[Transaction_Count],’Ventas_Diarias_YoY'[PriorYear.Transaction_Count])
La respuesta proporcionada por esta fórmula es 13.53. ¡Esto es incorrecto!

Línea Transaction_Count PriorYear.Transaction_Count ContarPrueba6
1 2867 3159 13.53084674
2 1472 1732 7.749660014
3 2515 2523 11.04036185
4 147 180 0.816666667
5 481 493 3.889987179
6 1173 1291 6.29352048
7 391 407 1.893128079

JuanLap

En respuesta a JuanLap

Corrección: La solución real fue un poco más compleja

Transacción Var % Medida = (DIVIDE(CALCULAR(SUMA(‘Tabla'[Count])), CALCULAR (SUMA (‘Tabla'[PriorYear.Count])),0)-1)*100

Esto realmente resuelve el problema.

La conversión a una medida es obligatoria y no funcionará con una consulta directa.

kan

Hola a todos,

Soy nuevo en power bi y estoy tratando de dividir dos columnas existentes y obtener el resultado en una columna calculada, pero los resultados son incorrectos. ¿Puede alguien ayudarme? Intenté usar la fórmula a continuación

%Completado = DIVIDIR(Nodo[completed],Nodo[Total])

Nodemajormilestonename Total terminado %Completo Valores correctos
Bloqueo de nodo preliminar 7701 2561 37.5610552 33.25
Bloqueo de nodo final 7701 1861 32.9809542
Aprobación de la sala de emergencias 7743 1822 42.0270005
Ingeniería de nodos 7701 1768 36.9119816
Equipo pedido 7701 599 17.5948997
Prepárate para empezar 7701 300 14.5904787
Solicitud de permiso de construcción 7701 812 22.3153618
Hacer listo completo 7701 219 12.3539329
Permiso de construcción recibido 7701 416 14.9592466
Inicio de construcción 7743 620 17.9762811
Poder completo 7743 482 11.040731
Construcción completa 7743 538 12.1115371
Inspección completa 7701 416 11.4564692 5.4
Integración Completa – Interna 7701 380 7.46115686
Nodo On-Air – Cliente 7701 264 5.80146265
Cierre completo 7711 435 9.91702557

Gracias..

Ashish_Mathur

En respuesta a kan

Hola,

No hay ningún error en su fórmula. Comparta el enlace desde donde puedo descargar su archivo PBI.

kan

En respuesta a Ashish_Mathur

Gracias por la respuesta. El siguiente es mi código fuente para el conjunto de datos. Tanto Total como Completado son campos originales y parte del conjunto de datos y están agrupados por nombre de nodo. Me sorprende cuando intento calcular completado/total en el poder bi.

Código fuente:

seleccione ProjectId,región,estado,milestonename como Nodemajormilestonename,nodemajormilestonedefaultsid,Total,completado
desde (
seleccione p.WspNetworkId distinto como projectid, p.regionid como región, p.networkstate como estado, nombre del hito, nodemajormilestonedefaultsid, recuento (distinct m.projectnodeid) Total,
suma (caso cuando la fecha real del hito no es nula, entonces 1 sino 0 finaliza) como completada
de dbo.ProjectMaster p
entrar
(
Seleccione
ID de diseño del proyecto
,Nombre del nodo
,max(Id de nodo de proyecto) Id de nodo de proyecto
de dbo.ProjectNode
agrupar por
ID de diseño del proyecto
,Nombre del nodo
) n en (p.ProjectDesignId = n.ProjectDesignId)
unirse a dbo.ProjectNodeMajorMilestone m on (n.ProjectNodeId = m.ProjectNodeId)
agrupar por MilestoneName,p.WspNetworkId,p.regionid,p.networkstate,nodemajormilestonedefaultsid)x
ordenar por ID de proyecto, ID de nodo mayor de hito predeterminado

El siguiente es mi conjunto de datos de origen:

Projecto ID región Expresar Nodemajormilestonename nodemajormilestonedefaultsid Total terminado
NC-IA-801GRAND-VZW C I A Bloqueo de nodo preliminar 1 1 0
NC-IA-801GRAND-VZW C I A Bloqueo de nodo final 2 1 0
NC-IA-801GRAND-VZW C I A Aprobación de la sala de emergencias 3 1 0
NC-IA-801GRAND-VZW C I A Ingeniería de nodos 4 1 0
NC-IA-801GRAND-VZW C I A Equipo pedido 5 1 0
NC-IA-801GRAND-VZW C I A Prepárate para empezar 6 1 0
NC-IA-801GRAND-VZW C I A Solicitud de permiso de construcción 7 1 0
NC-IA-801GRAND-VZW C I A Hacer listo completo 8 1 0
NC-IA-801GRAND-VZW C I A Permiso de construcción recibido 9 1 0
NC-IA-801GRAND-VZW C I A Inicio de construcción 10 1 0
NC-IA-801GRAND-VZW C I A Poder completo 11 1 0
NC-IA-801GRAND-VZW C I A Construcción completa 12 1 0
NC-IA-801GRAND-VZW C I A Inspección completa 13 1 0
NC-IA-801GRAND-VZW C I A Integración Completa – Interna 14 1 0
NC-IA-801GRAND-VZW C I A Nodo On-Air – Cliente 15 1 0
NC-IA-801GRAND-VZW C I A Cierre completo dieciséis 1 0
NC-IA-CLARKEF1-VZW C I A Bloqueo de nodo preliminar 1 5 0
NC-IA-CLARKEF1-VZW C I A Bloqueo de nodo final 2 5 0
NC-IA-CLARKEF1-VZW C I A Aprobación de la sala de emergencias 3 5 0
NC-IA-CLARKEF1-VZW C I A Ingeniería de nodos 4 5 0
NC-IA-CLARKEF1-VZW C I A Equipo pedido 5 5 0
NC-IA-CLARKEF1-VZW C I A Preparar Comienzo 6 5 0
NC-IA-CLARKEF1-VZW C I A Solicitud de permiso de construcción 7 5 0
NC-IA-CLARKEF1-VZW C I A Hacer listo completo 8 5 0
NC-IA-CLARKEF1-VZW C I A Permiso de construcción recibido 9 5 0
NC-IA-CLARKEF1-VZW C I A Inicio de construcción 10 5 0
NC-IA-CLARKEF1-VZW C I A Poder completo 11 5 0
NC-IA-CLARKEF1-VZW C I A Construcción completa 12 5 0
NC-IA-CLARKEF1-VZW C I A Inspección completa 13 5 0
NC-IA-CLARKEF1-VZW C I A Integración Completa – Interna 14 5 0
NC-IA-CLARKEF1-VZW C I A Nodo On-Air – Cliente 15 5 0
NC-IA-CLARKEF1-VZW C I A Cierre completo dieciséis 5

0

A continuación se muestran los datos que se intentaron generar en el modo de visualización a partir de conjuntos de datos. Aquí usé

Completar = DIvidir (Consulta1[completed],Consulta1[Total] que está dando resultados incorrectos (podrían ser datos resumidos). Por ejemplo, para Bloqueo de nodo preliminar completo = 2561/7701 = 0,332 pero da 37,56, lo cual es incorrecto.

Nodemajormilestonename Total terminado Completo
Bloqueo de nodo preliminar 7701 2561 37.56106
Bloqueo de nodo final 7701 1865 33.98095
Aprobación de la sala de emergencias 7743 1822 42.027
Ingeniería de nodos 7701 1768 36.91198
Equipo pedido 7701 599 17.5949
Prepárate para empezar 7701 300 14.59048
Solicitud de permiso de construcción 7701 812 22.31536
Hacer listo completo 7701 223 13.35393
Permiso de construcción recibido 7701 417 15.20925
Inicio de construcción 7743 620 17.97628
Poder completo 7743 482 11.04073
Construcción completa 7743 538 12.11154
Inspección completa 7701 416 11.45647
Integración Completa – Interna 7701 380 7.461157
Nodo On-Air – Cliente 7701 264 5.801463
Cierre completo 7711 435 9.917026

Gracias..

Ashish_Mathur

En respuesta a kan

Hola,

No estoy seguro de qué está haciendo ese código, pero supongo que primero desea agrupar por la cuarta columna y luego agregar los números de las últimas 2 columnas. Si ese es el caso, cree una tabla visual y arrastre la cuarta columna en las etiquetas de fila. Luego escribe estas medidas:

Total1 = SUMA(Datos[Total])

Total2 = SUMA(Datos[Completed])

Total3=[Total2]/[Total1]

¿Eso ayuda?

kan

En respuesta a Ashish_Mathur

Hola Superusuario @Ashish_Mathur,

Gracias por la respuesta.Yaa esto funcionó.

Ashish_Mathur

En respuesta a kan

De nada.

@JuanLap,

Su fórmula DAX es correcta. ¿Utiliza la última versión de Power BI Desktop (2.53.4954.621)? ¿De qué tabla proviene el campo Línea? ¿Es también un campo en la tabla YoY_Daily_Sales?

Saludos,
lidia

JuanLap

En respuesta a v-yuezhe-msft

Gracias por la respuesta.

Creo que puedo haber descubierto lo que está sucediendo, pero me sorprende si está diseñado de esta manera.

El Line# proviene de la misma tabla. En realidad es ESTADO pero lo cambié a Línea # por simplicidad.

Si bien la vista de la tabla en PowerBI se resume en el nivel de línea n.° (Agrupar por), hay varias filas detrás de eso. Parece que Power BI está haciendo la división en cada línea del nivel de detalle más bajo y luego promediando o sumando eso. Esta es absolutamente la forma incorrecta de hacerlo. Hubiera asumido que los cálculos de «Fila por Fila» significaban cada Fila que está en la VISTA. Para resolver el problema, tuve que crear una vista SQL en la tabla de origen que resumiera los datos por Line#(State). Entonces, eso se convierte en el nivel más bajo de detalle.

Es necesario cambiar la documentación o esta función DIVIDE. Los usuarios de estos informes pueden hacer fácilmente la división en la vista que ven y determinar que las matemáticas son simplemente incorrectas. Gran manera de perder la credibilidad de un informe. Además, reduce drásticamente el «PODER» en PowerBI si tengo que crear vistas para agregar a cada grupo por nivel que quisiera en el informe. Mi expectativa era que podría producir los datos en el nivel más bajo y hacer que todas las matemáticas funcionaran mientras los agrupaba como quisiera en Power BI. ¡NO!

smpa01

Captura.PNG

JuanLap

En respuesta a smpa01

Veo que recreaste el problema para probar. GRACIAS por tomarse el tiempo para hacerlo. Sin embargo, solo recreó una línea de datos para cada línea en la vista resumida. Si tenía varias filas detrás de cada una de las filas de Line#, la fórmula proporciona un resultado incorrecto. Este es el problema.

smpa01

En respuesta a JuanLap

@JohnLap: ¿puede compartir los datos de muestra en Excel/PBI, lo que prefiera?

JuanLap

En respuesta a smpa01

Esta publicación fue «eliminada» y marcada como exitosa. Lo volví a abrir.

Estoy publicando más pruebas. El problema es real.

JuanLap

En respuesta a JuanLap

Tuve que recrear el problema ya que lo resolví haciendo vistas de resumen en fuente SQL.

Aquí están los datos resumidos. Esta es la vista real creada en PBI y los datos están debajo. Usé el grupo nativo por línea #

En la tabla de datos he incluido PURE CALC para mostrar la respuesta correcta. La fórmula proporcionada en Power BI no funciona como debería.

DIVIDIR muestra 1.jpg

Línea# Recuento de transacciones PriorYear.Transaction_Count Calculo puro: ((B/C)-1)*100 PBI CountTest 8 = (DIVIDE(‘YoYDailySalesbyStateComp'[Transaction_Count],’VentasDiariasYoYporCompEstado'[PriorYear.Transaction_Count],0)-1)*100
1 9013 7403 21.75 35.04
2 4529 4610 -1.76 0.28
3 7641 6530 17.01 22.77
4 362 336 7.74 51.83
5 1342 1296 3.55 3.46
6 3435 3632 -5.42 -5.37
7 1116 1045 6.79 18.90
8 652 645 1.09 1.46

Aquí están las líneas de detalle que componen cada uno de los números de línea anteriores.

Expresar Transacción Contar PriorYear.Transaction_Count
1 2370 1260
1 3021 3159
1 3622 2984
2 1289 1116
2 1472 1732
2 1768 1762
3 2242 1431
3 2515 2523
3 2884 2576
4 59 23
4 156 133
4 147 180
5 352 353
5 509 450
5 481 493
6 976 1020
6 1173 1291
6 1286 1321
7 270 164
7 391 407
7 455 474
8 200 203
8 248 211
8 204 231

smpa01

En respuesta a JuanLap

Bien, esto es lo que hice

let
    Source = Web.Page(Web.Contents("http://community.powerbi.com/t5/Desktop/ON-ADD-COLUMN-DIVIDE-function-with-two-columns-yields-wrong/m-p/330494#M147703")),
    Data2 = Source{2}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Data2, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"State", Int64.Type}, {"Transaction Count", Int64.Type}, {"PriorYear.Transaction_Count", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"State"}, {{"Transaction Count", each List.Sum([Transaction Count]), type number}, {"Prior Year.Transaction Count", each List.Sum([PriorYear.Transaction_Count]), type number}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each (([Transaction Count]/[Prior Year.Transaction Count])-1)*100),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Custom", type number}}),
    #"Rounded Off" = Table.TransformColumns(#"Changed Type1",{{"Custom", each Number.Round(_, 2), type number}})
in
    #"Rounded Off"

es

JuanLap

En respuesta a smpa01

Aplicaré esos pasos ahora y veré lo que obtengo.

¡¡¡Muchas gracias por el apoyo!!!

Informaré después del almuerzo.

smpa01

En respuesta a JuanLap

Es esto lo que estás buscando ?Es esto lo que estás buscando ?

JuanLap

En respuesta a smpa01

No. Las fórmulas funcionan bien en el nivel más bajo de registro de detalles para los datos de origen. En otras palabras, si no es un resumen de los datos de origen, la fórmula funciona. Si se resume, en este ejemplo, en el nivel de Línea #, no lo hace.

kan

En respuesta a JuanLap

Hola @JohnLap,

Tengo el mismo problema en el que la división va mal ya que mis datos también se resumen. ¿Puede compartir cómo resolvió esto en la vista SQL?

Gracias..

JuanLap

En respuesta a JuanLap

Corrección: La solución real fue un poco más compleja

Transacción Var % Medida = (DIVIDE(CALCULAR(SUMA(‘Tabla'[Count])), CALCULAR (SUMA (‘Tabla'[PriorYear.Count])),0)-1)*100

Esto realmente resuelve el problema.

La conversión a una medida es obligatoria y no funcionará con una consulta directa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *