Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Filtrar cotas en una columna calculada

Tengo una tabla con precios, para tiendas, productos y fechas, y tengo una tabla de dimensiones separada para cada dimensión. Me gustaría identificar datos erróneos en la columna de precios mediante la búsqueda de valores atípicos, valores que se encuentran muy lejos de la distribución de los datos para una combinación determinada de fecha, artículo y tipo de tienda. Para hacer esto, necesitaría ver el primer cuartil y el tercer cuartil de la distribución en dos columnas calculadas utilizando la función PERCENTILEX, donde los valores son para la fecha y el tipo de artículo y tienda provienen de la fila dada, pero se consideran todas las tiendas dentro de ese tipo (y también hay otras columnas en la tabla).

He aprendido que CALCULATE es la mejor práctica en estos casos, pero no logré producir resultados que funcionen de esta manera:

PriceFirstQuartile =
CALCULAR(
PERCENTILEX. INC('Precio','Precio'[Precio], 0.25),
TODO('Precio'),
'Precio'[ARTICLE_CODE],
'Precio'[FECHA],
'Precio'[SHOP_TYPE_CODE]
)

Solo he encontrado dos formas de hacer que esto funcione, ambas son con variables:

Versión 1:

PriceFirstQuartile v1 =
DÓNDE Miartículo = 'Precio'[ARTICLE_REF]
DÓNDE MyDate = 'Precio'[Fecha]
DÓNDE MyShopType= 'Precio'[SHOP_TYPE_CODE]
DÓNDE MyTable =
FILTRO(
'Precio',
'Precio'[ARTICLE_CODE] = Miartículo && 'Precio'[Fecha] = MyDate && 'Precio'[SHOP_TYPE_CODE] = MyShopType
)
DEVOLUCIÓN
PERCENTILEX. INC(MyTable,'Precio'[Precio], 0.25)
Versión 2:
PriceFirstQuartile v2 =
DÓNDE Miartículo = 'Precio'[ARTICLE_CODE]
DÓNDE MyDate = 'Precio'[Fecha]
DÓNDE MyShopType= 'Precio'[SHOP_TYPE_CODE]
DÓNDE MyTable =
CALCULABLE(
TODO('Precio'),
'Precio'[ARTICLE_REF] = Miartículo, 'Precio'[Fecha] = MyDate, 'Precio'[SHOP_TYPE_CODE] = MyShopType
)
DEVOLUCIÓN
PERCENTILEX. INC(MyTable,'Precio'[Precio], 0.25)
Mi pregunta es: ¿cómo hacer que funcione con CALCULATE y cuál es la razón por la que mi sugerencia propuesta no funcionó?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@smoortema ¿Por qué está creando esto como una columna calculada?

Tenga mucho cuidado al usar funciones agregadas dentro de columnas calculadas: no proporciona el contexto correcto y es posiblemente lo que quiere decir cuando dice "He aprendido que CALCULAR es la mejor práctica en estos casos".

CALCULATE lo coloca en un contexto de filtro, por lo que convierte la columna calculada en una sola medida, tomando los valores de fila actuales como contexto de filtro para esa medida. Dado que lo coloca en un contexto de filtro equivalente, las referencias de su columna se comportarán de manera diferente de lo que podría esperar.

Si entiendo su pregunta correctamente (de nuevo todavía no estoy seguro de por qué está haciendo esto como una columna y no como una medida), podría intentar:

PriceFirstQuartile =
CALCULAR(
PERCENTILEX. INC('Precio','Precio'[Precio], 0.25),
TODOSEXCEPTO('Precio',
'Precio'[ARTICLE_CODE],
'Precio'[FECHA],
'Precio'[SHOP_TYPE_CODE]
)
)

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@smoortema ¿Por qué está creando esto como una columna calculada?

Tenga mucho cuidado al usar funciones agregadas dentro de columnas calculadas: no proporciona el contexto correcto y es posiblemente lo que quiere decir cuando dice "He aprendido que CALCULAR es la mejor práctica en estos casos".

CALCULATE lo coloca en un contexto de filtro, por lo que convierte la columna calculada en una sola medida, tomando los valores de fila actuales como contexto de filtro para esa medida. Dado que lo coloca en un contexto de filtro equivalente, las referencias de su columna se comportarán de manera diferente de lo que podría esperar.

Si entiendo su pregunta correctamente (de nuevo todavía no estoy seguro de por qué está haciendo esto como una columna y no como una medida), podría intentar:

PriceFirstQuartile =
CALCULAR(
PERCENTILEX. INC('Precio','Precio'[Precio], 0.25),
TODOSEXCEPTO('Precio',
'Precio'[ARTICLE_CODE],
'Precio'[FECHA],
'Precio'[SHOP_TYPE_CODE]
)
)

¡ Gracias @AllisonKennedy, su solución sugerida funciona!

La razón por la que lo puse en una columna calculada es porque me gustaría identificar (y luego excluir) valores atípicos en la tabla. Los valores atípicos se definen como filas para las que:

Precio > ThirdQuartile + 3 * (ThirdQuartile - FirstQuartile)

o

Precio < FirstQuartile - 3 * (ThirdQuartile - FirstQuartile)

Entonces, básicamente, estos son valores que caen muy lejos del rango normal de precios para ese día, artículo y tipo de tienda determinados. Probablemente estén allí debido a un error cometido por la persona que estaba escribiendo los valores.

Una vez que tengo los valores atípicos, creo una tabla calculada donde filtro todos los valores atípicos, y continúo el resto de mis cálculos en esa tabla.

Para empezar, para analizar, era bueno ver todos los valores en la misma tabla, además de entre sí, por lo que las columnas calculadas eran útiles. ¿Estás diciendo que todo este filtrado puter podría hacerse solo mediante el uso de medidas?

@smoortema Sí, todo esto se puede hacer usando medidas en lugar de columnas, ya que está agregando los datos. ¡También será más fácil y eficiente de cargar!

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.