Error «Expresiones que producen variante de tipo de datos …» cuando su columna es del tipo de datos «Número entero»

Un usuario Pregunto ✅

RiskyBiscuts

Éste es extraño. Soy muy consciente de lo que implica este error («Las expresiones que producen tipos de datos variantes no se pueden usar para definir columnas calculadas»), pero no estoy seguro de por qué ocurre en este caso específico. Algunos antecedentes sobre esto, agregué dos tablas, una proveniente de una base de datos SQL Sever estándar y la otra de Azure Data Lake Storage Gen2 (combiné varios archivos e hice un recuento de una columna llamada desviaciones). El objetivo final es crear una columna calculada de la mediana de la columna denominada «desviaciones únicas». Tiene que ser una columna calculada.

Mediana.PNG

Ambas fuentes de datos tienen el tipo de datos como «número entero», y cuando las agregué, me aseguré de establecer el tipo de datos en «Número entero», eliminé cualquier error, nulo, etc. Cuando tuve problemas para disparar los datos de la fuente SQL, como columna calculada para Mediana, funciona bien. Entonces sospecho que es la tabla de datalake, donde usé algo de M para calcular los recuentos. La parte confusa es que el Total calculado por la tabla da como resultado un número entero, por lo que no estoy seguro de por qué ocurre esto.

Cuenta obras.PNG

Todo lo que puedo pensar es que de alguna manera la otra tabla no tiene el formato correcto, pero no tengo idea de cómo solucionarlo. He mirado otras publicaciones relacionadas, pero ambas columnas de mi fuente han sido formateadas en números enteros, así que estoy perdido. Todo lo que puedo pensar es que es algo sobre la tabla del lago de datos o que el tipo de datos realmente no funciona como debería. ¿Ayudar?

Un cordial saludo,

Greg_Deckler

En respuesta a RiskyBiscuts

@RiskyBiscuts – Intenté usar PERCENTILE.EXC y PERCENTILE.INC pero el mismo comportamiento. También probé todas las variaciones de MEDIANX que se me ocurrieron e incluso agregué CALCULATE aquí y allá. No pude hacer que funcione.

Pero, donde hay voluntad, hay un camino.

Column 4 = 
    VAR __Table = ADDCOLUMNS(ADDCOLUMNS('Table (19)',"Above",COUNTROWS(FILTER('Table (19)',[Unique Deviation]<EARLIER([Unique Deviation]))),"Below",COUNTROWS(FILTER('Table (19)',[Unique Deviation]>EARLIER([Unique Deviation])))),"Diff",ABS([Above]-[Below]))
    VAR __Min = MINX(__Table,[Diff])
RETURN
    MAXX(FILTER(__Table,[Diff]=__Min),[Unique Deviation])

Fuerza bruta, columna mediana manual. Se adjunta PBIX actualizado.

En respuesta a Greg_Deckler

No estoy seguro de que sea un error.
MEDIAN y MEDIANX devuelven una VARIANTE: https://dax.guide/median/

Por lo tanto, no se pueden utilizar en una columna calculada tal cual.

Sin embargo, puede convertir el resultado:

CONVERT ( MEDIAN ( Table[Column] ), INTEGER )

De esta manera, puede usarlo en una columna calculada. Mantiene el riesgo de una conversión fallida a INTEGER.

Creo que la razón por la que MEDIAN / MEDIANX es una variante es porque originalmente estaban destinados a usarse con cualquier tipo de datos, incluidas las cadenas, aunque ahora no son compatibles con ese tipo de datos como entrada, por lo que realmente no lo sé por qué devuelven variantes en lugar de números … Deberíamos preguntarle a Microsoft sobre esto.

RiskyBiscuts

@Greg_Deckler lo siento amigo, intenté publicarlo pero seguía dándome un error html. Es el siguiente.

Mediana = MEDIANA (‘Datos del proyecto'[Unique Deviation])

Greg_Deckler

En respuesta a RiskyBiscuts

@RiskyBiscuts – Bueno, puedo reproducir esto completamente con solo un pequeño conjunto de datos. Ver PBIX adjunto, Tabla 19 (abajo sig). Realmente un poco extraño. Funciona perfectamente bien en cierta medida, pero como columna calculada, bombardea miserablemente. Pero otros agregadores funcionan, SUMA, PROMEDIO, etc. A MEDIANA no parece gustarle el contexto de la columna. Parece un error, pero tal vez @marcorusso intervenga en este.

Además, las variaciones de MEDIANX actúan de la misma manera.

En respuesta a Greg_Deckler

No estoy seguro de que sea un error.
MEDIAN y MEDIANX devuelven una VARIANTE: https://dax.guide/median/

Por lo tanto, no se pueden utilizar en una columna calculada tal cual.

Sin embargo, puede convertir el resultado:

CONVERT ( MEDIAN ( Table[Column] ), INTEGER )

De esta manera, puede usarlo en una columna calculada. Mantiene el riesgo de una conversión fallida a INTEGER.

Creo que la razón por la que MEDIAN / MEDIANX es una variante es porque originalmente estaban destinados a usarse con cualquier tipo de datos, incluidas las cadenas, aunque ahora no son compatibles con ese tipo de datos como entrada, por lo que realmente no lo sé por qué devuelven variantes en lugar de números … Deberíamos preguntarle a Microsoft sobre esto.

Rikirk

En respuesta a Marcorusso

¡Maestro!

RiskyBiscuts

En respuesta a Marcorusso

@marcorusso, esta también es una gran solución, de hecho, esto me ayuda a responder la pregunta que también le hice a @Greg_Deckler. ¡Elegante!

CONVERTIR (MEDIANX (
FILTRAR(
TODOS (‘Datos del proyecto’),
[UnitType] = ANTES ([UnitType])
),
[Unique Deviation]
), INTEGER)

Greg_Deckler

En respuesta a Marcorusso

@marcorusso – Gracias de nuevo por tu información. Supongo que es al menos un error de «documentación» ya que los documentos dicen que devuelve un número decimal. Su documentación es aparentemente más precisa.

https://community.powerbi.com/t5/Issues/MEDIAN-documentation-error/idi-p/1322575#M60278

En respuesta a Greg_Deckler

Esa es una de las razones por las que creamos la Guía DAX, aunque la principal es que queríamos un almacenamiento estructurado de metadatos que no estuviera disponible de otra manera (como la transición de contexto y otros detalles que no están incluidos en la documentación de Microsoft). Sin embargo, no queríamos copiar o reemplazar la documentación de Microsoft, por lo que incluimos un enlace a eso en cada función; muchos ejemplos son útiles.

Greg_Deckler

En respuesta a Marcorusso

@marcorusso, @RiskyBiscuts – Por supuesto, esta discusión ha llevado a otro de mis To ** bleep ** With Quick Measures.

https://community.powerbi.com/t5/Quick-Measures-Gallery/To-bleep-With-MEDIAN/td-p/1322755

🙂

RiskyBiscuts

En respuesta a Greg_Deckler

@Greg_Deckler / @marcorusso ese niño llorando era yo hasta que ustedes me encontraron una solución, y estoy de acuerdo, creo que M $ hace esto intencionalmente para que podamos recordar las matemáticas, jejeje.

RiskyBiscuts

En respuesta a Greg_Deckler

@Greg_Deckler correcto, podría obtener el promedio sin problema, ¡pero el promedio es un fracaso miserable! Miré su archivo pbi, ¡así que gracias por reproducirlo! Estoy dispuesto a apostar que ni siquiera podría usar la tabla combinada en un modelo de datos, me recuerda algo que sucedió en mi pasado. Ojalá exista una solución.

Greg_Deckler

En respuesta a RiskyBiscuts

@RiskyBiscuts – Intenté usar PERCENTILE.EXC y PERCENTILE.INC pero el mismo comportamiento. También probé todas las variaciones de MEDIANX que se me ocurrieron e incluso agregué CALCULATE aquí y allá. No pude hacer que funcione.

Pero, donde hay voluntad, hay un camino.

Column 4 = 
    VAR __Table = ADDCOLUMNS(ADDCOLUMNS('Table (19)',"Above",COUNTROWS(FILTER('Table (19)',[Unique Deviation]<EARLIER([Unique Deviation]))),"Below",COUNTROWS(FILTER('Table (19)',[Unique Deviation]>EARLIER([Unique Deviation])))),"Diff",ABS([Above]-[Below]))
    VAR __Min = MINX(__Table,[Diff])
RETURN
    MAXX(FILTER(__Table,[Diff]=__Min),[Unique Deviation])

Fuerza bruta, columna mediana manual. Se adjunta PBIX actualizado.

RiskyBiscuts

En respuesta a Greg_Deckler

@Greg_Deckler, ¡eres fantástico! ¡Eso fue todo! ¡Me dio 41 como debería! Me alegraste el día, gracias.

Greg_Deckler

En respuesta a RiskyBiscuts

@RiskyBiscuts: todavía creo que es un error, pero de alguna manera he comenzado una tendencia de crear cálculos equivalentes de DAX para funciones de DAX. MOD, RANKX, «inteligencia» de tiempo, etc. ¡Supongo que agregaré MEDIAN a esa lista! 🙂

RiskyBiscuts

En respuesta a Greg_Deckler

@Greg_Deckler De hecho, tengo otra pregunta relacionada con esta, ¿empiezo una nueva pregunta?

(Necesito encontrar la mediana, pero esta vez por «Tipo de unidad» (una columna diferente, pero ese error de UniqueDeviation causa ese error …)

Greg_Deckler

@RiskyBiscuts – ¿Cuál es la fórmula para esa columna mediana o hay una?

Deja un comentario

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