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

Cálculos diarios históricos basados en campos dinámicos

Hola a todos,

Me encontré con un obstáculo con una solicitud que recibí de un departamento. Quería ver si otro par de ojos podía arrojar algo de luz sobre las posibilidades.

El departamento necesita rastrear el inventario diario durante la noche que no se envió. El objetivo del departamento es recibir un envío, preparar el objeto y luego enviarlo el mismo día. Los datos tienen varias columnas de fecha que van desde la fecha del pedido, el checkindate (fecha de recepción en el sitio), la fecha de preparación y la fecha del paquete (se envía el mismo día que se empaqueta). los diversos pasos también tienen columnas de estado. El problema que estoy teniendo es que puedo calcular en tiempo real, el inventario que tenemos en el sitio, pero una vez que la base de datos se actualiza y el artículo ahora obviamente se muestra fuera del sitio. El departamento quiere ver el porcentaje de artículos enviados cada día en comparación con los artículos en inventario al comienzo del día más los artículos recibidos ese día.

Un ejemplo sería, si tenemos 50 artículos en inventario durante la noche y recibimos 50 artículos hoy, entonces el objetivo es enviar 90 artículos (90%) hoy. Necesitamos poder ver estos porcentajes WTD, MTD y YTD en función de los cálculos diarios.

La fecha de checkin significa que el elemento está en las instalaciones, por lo que mi cálculo para ver qué hay en el sitio ahora es:

_CurrentInventory =
CALCULAR(
COUNTROWS(TestData),
NOT(ISBLANK(TestData[OrderCheckInDate])),
TestData[ReturnShipStatus] = "Pendiente",
OR(NOT(TestData[OrderStatus] = "Cancelado"),
NOT(TestData[OrderCheckInStatus] = "Cancelado"))
)
El problema con el que me estoy encontrando es que el pedido está en casa y se encuentra en el almacén durante 2 días, necesito ese pedido para calcular en casa para esos dos días y simplemente no se cuenta en función de la fecha de envío (si usé esa fecha en un cálculo como filtro)
¿Alguna idea?
A continuación se muestra un enlace de Google Drive a un archivo .pbix con datos para que los vea. Cualquier ayuda es apreciada
8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

¿Está usando Power BI para algo para lo que no fue diseñado? ¿No tienes un sistema de gestión de inventario en tu empresa?

@lbendlin


Veo lo que usted está diciendo, pero lamentablemente no lo hacemos en el contexto de lo que usted está hablando. No tengo acceso al backend de esta base de datos y solo puedo extraer datos de ella. El departamento con el que estoy trabajando quiere rastrear diariamente el porcentaje de pedidos que se envían con el denominador retenido desde el día anterior más los pedidos entrantes de ese día.

Dado que todos los pedidos con fines de cálculo se filtran por una columna de fecha, estaba tratando de encontrar una manera de que un pedido se cuente cada día entre la fecha de recepción y envío. Ejemplo: si un pedido se recibió en 5/5 (columna ReceivedDate) y luego se envía en 5/8 (columna shippeddate), necesitaría la medida o medida y la cuenta de columna calc para 5/6 y 5/7 en inventario, pero no específicamente designada por una columna de fecha.

esperanza que tiene sentido. Créeme, entiendo que 1. Esta fuente de datos y el proceso en su conjunto no es ni de lejos ideal, pero es lo que tengo que trabajar vale la pena. 2. Que esto no sea posible. He calculado la métrica para in house actualmente y los pedidos enviados hoy, pero no estoy seguro de las métricas históricas relacionadas con el tiempo en esta situación.

El enfoque habitual es tener una tabla de calendario y una tabla de hechos con varias fechas. Una fecha está vinculada a la fecha del calendario con una relación activa (por ejemplo, OrderCreated Date). Las otras fechas están vinculadas a través de relaciones inactivas. Estos pueden ser utilizados en medidas a través de USERELATIONSHIP().

Su ejemplo parece sugerir que desea utilizar varias tablas de calendario que cubran diferentes eventos. Si puede dejar de lado ese diseño y pasar al que mencioné anteriormente, entonces puede tener la oportunidad de hacer que esto funcione.

@lbendlin

Debido a la naturaleza altamente sensible de los datos con los que trabajamos, el conjunto de datos que envié está diluido y limitado en comparación con los datos con los que realmente estoy jugando. Utilizo una tabla de fechas extensa y todas las fechas están conectadas a la tabla de fechas y cuando necesito usar una fecha en particular que no es la conexión principal a la tabla de fechas, uso "USERELATIONSHIP". Entonces, lo que estoy usando en el backend imita un poco de lo que estás describiendo.

No me importa volver al departamento y decirles que su diseño de fuente de datos no es conducente a esta métrica en particular, pero quería al menos llegar primero a los expertos para ver si es posible. Si necesita que agregue mi tabla de fechas al ejemplo, entonces puedo hacerlo.

He escrito algunas medidas que juegan con SELECTEDVALUE ('Date' [Date]) dentro de una vista de tabla, pero aún así me encuentro con que cada fila solo se cuenta una vez, incluso si está en inventario durante 3 días. Entiendo por qué está sucediendo esto, pero no estoy seguro de si hay una manera de hacerlo. Estaba pensando que tal vez usar Power Query para construir una tabla de inventario con cada pedido y las fechas en que está en el inventario, pero eso haría que orderId y la columna de fecha de esa tabla fueran una situación "Muchos" con ambos y no sé si eso funcionaría con esta situación. ¿Pensamientos?

Podría funcionar para volúmenes de datos más pequeños. La lógica personalizada y la escalabilidad no suelen ir bien juntas.

¿Qué decisiones de negocio está impulsando el informe? ¿Se puede obtener la inteligencia requerida para tomar estas decisiones de alguna otra manera?

@lbendlin

Esta métrica es para uno de los objetivos anuales de los departamentos. Entiendo que estoy empujando los límites, si no más, lo que Power BI puede hacer, pero la base de datos a la que tengo acceso es la que es (¡Por ahora!).

Me decidí por una solución temporal creando un proceso de reescritura en SQL. Creé el equivilant de la medida DAX en Power Query dentro de una tabla duplicada solo para este proceso. A continuación, creé una tabla en una instancia de SQL que tengo y cuando el informe se actualiza, si no se encuentra un duplicado, escribe los datos que necesito y, a continuación, los datos se actualizan en el extremo de Power BI para reflejarlo. Está funcionando hasta ahora, así que cruzando los dedos se mantiene bien hasta que encuentre otra solución dentro de Power BI o en el lado de la base de datos (sin contener la respiración).

Gracias por su ayuda con esto

"mediante la creación de un proceso de escritura en SQL"

PRECAUCIÓN: No hay garantía de que Power Query ejecute la consulta solo una vez. https://blog.crossjoin.co.uk/2020/07/05/why-is-power-bi-running-my-sql-query-twice/

Power BI aún no admite la reescritura de datos adecuada.

@lbendlin

Sí, lo pensé en la consulta que escribí. Primero hago que verifique si hay entradas duplicadas y, si no se encuentra ningún duplicado, escriba. De lo contrario, simplemente devuelva la tabla sin escribir.

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.