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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Cálculo de días laborables

Hola

He leído numerosos hilos en calcular días laborables, pero todavía no está consiguiendo él trabajando en el momento..

Tengo:

  • una tabla de fechas (marcada como tabla de fechas)
    • una columna IsWorkingDay

PaulusD_0-1623998499562.png

  • una tabla de datos.
  • columna calculada para la diferencia en días laborables

PaulusD_1-1623998718780.png

Ahora algunas filas devuelven valores que parecen estar bien, y algunas filas están en blanco.

Las filas en blanco están en casos donde las fechas que se miden son las mismas (en cuyo caso esperaría un 0), pero también en casos en los que difieren (en cuyo caso "simplemente" necesito un resultado).

¿Alguien puede ayudarme con esto?

Gracias por el apoyo.

ps., tengo miedo de que no puedo compartir el .pbix...

1 ACCEPTED SOLUTION

@v-robertq-msft , creo que lo he encontrado!

La tabla de fechas y la columna de días laborables son iguales, pero el delta de días laborables se ha convertido en el siguiente:

PaulusD_0-1625119760150.png

como puede ver, el único envío retrasado en el resumen ahora obtiene un número positivo. ¡Debería poder usar esto para medir los envíos retrasados dentro de una tolerancia que finalmente obtenga el rendimiento basado en días hábiles! :):):)

View solution in original post

14 REPLIES 14
Syndicate_Admin
Administrator
Administrator

Ahí, @tqn626

Según su descripción de los datos de ejemplo, creé otras dos filas de datos y transformé la fórmula DAX para quitar el valor en blanco:

Workdays Count =

IF(

    [Start Date]<=[End Date],

    CALCULATE(SUM('Date'[Isworkday]),FILTER(ALL('Date'),'Date'[Date]>=EARLIER('Fact table'[Start Date])&&'Date'[Date]<=EARLIER('Fact table'[End Date]))),

    CALCULATE(SUM('Date'[Isworkday]),FILTER(ALL('Date'),'Date'[Date]<=EARLIER('Fact table'[Start Date])&&'Date'[Date]>=EARLIER('Fact table'[End Date]))))

Y puede obtener el resultado esperado:

vrobertqmsft_0-1625120670707.png

Puede descargar mi archivo pbix de prueba a continuación

¡Muchas gracias!

Saludos

Equipo de apoyo a la comunidad _Robert Qin

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

hola

De acuerdo con su descripción en detalle, puedo entender aproximadamente su requisito ahora, y actualicé mi método, puede echar un vistazo y verificar si esto puede ser útil:

Esta es la tabla de hechos de prueba que creé:

vrobertqmsft_0-1625111268936.png

  1. Crear una tabla de calendario:
Date = CALENDARAUTO()
  1. Cree una columna calculada en la tabla de calendario:
Isworkday =

IF(WEEKDAY([Date],2)>5,0,1)
  1. No les des una relación:

vrobertqmsft_1-1625111268940.png

  1. volver a crear una columna calculada en la tabla de hechos:
Workdays Count =

CALCULATE(SUM('Date'[Isworkday]),FILTER(ALL('Date'),'Date'[Date]>=EARLIER('Fact table'[Start Date])&&'Date'[Date]<=EARLIER('Fact table'[End Date])))

Y puedes obtener lo que quieras, así:

vrobertqmsft_2-1625111268941.png

Puede descargar mi archivo pbix de prueba a continuación

¡Muchas gracias!

Saludos

Equipo de apoyo a la comunidad _Robert Qin

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hay @v-robertq-msft ,

Ahora bien, ese es un enfoque que aún no he probado :).

Me pongo a esto hoy y hacerle saber si funciona.

Solo por curiosidad, ¿esa tabla de fechas está marcada como la tabla de fechas?

¿Y por qué no hay relación entre las dos tablas?

Se pondrá en marcha a usted a.s.a.p..

Hay @v-robertq-msft ,

Lo probé de inmediato :), pero todavía me estoy topando con algo aquí.

Aquí están mis columnas:

fecha:

PaulusD_1-1625116704178.png

Identificador de día laborable:

PaulusD_0-1625116661071.png

Este bit es claro y funciona bien.

pero....

PaulusD_2-1625116885797.png

Cuando la fecha de envío es posterior a la fecha de promesa, el resultado parece correcto.

Sin embargo, cuando el envío es anterior a la fecha de promesa, el resultado está vacío. Probablemente porque la función sum no puede encontrar nada para algunos en función de las condiciones.

Pero la realidad es (fortuantemente) que la mayoría de los envíos se entregan a tiempo, por lo que también se necesitan valores negativos para determinar qué tan temprano se entrega el envío. Usted puede imaginar que el cliente no quiere sus productos demasiado pronto. También tenemos un límite para eso.

Parhaps Puedo mezclar su fijar en un countrows en vez de una suma y ver si aquello trabajos.

@v-robertq-msft , creo que lo he encontrado!

La tabla de fechas y la columna de días laborables son iguales, pero el delta de días laborables se ha convertido en el siguiente:

PaulusD_0-1625119760150.png

como puede ver, el único envío retrasado en el resumen ahora obtiene un número positivo. ¡Debería poder usar esto para medir los envíos retrasados dentro de una tolerancia que finalmente obtenga el rendimiento basado en días hábiles! :):):)

Syndicate_Admin
Administrator
Administrator

hola

De acuerdo con su descripción, puedo entender aproximadamente su requisito, creo que simplemente puede lograr esto usando una tabla de calendario, una columna calculada y una medida:

Crear una tabla de calendario:

Date = CALENDAR(DATE(2021,1,1),DATE(2021,12,31))

Cree una columna calculada:

Isworkday =

IF(WEEKDAY([Date],2)>5,0,1)

A continuación, cree una medida:

Count of workdays =

CALCULATE(SUM('Date'[Isworkday]),ALLSELECTED('Date'))

A continuación, puede crear una segmentación de datos y un gráfico de tarjetas para colocarlos de la siguiente manera:

vrobertqmsft_0-1625042593505.png

Y puedes conseguir lo que quieras.

Puede descargar mi archivo pbix de prueba a continuación

¡Muchas gracias!

Saludos

Equipo de apoyo a la comunidad _Robert Qin

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

@v-robertq-msft

Estaba buscando algo similar y su solución aquí funciona bien para los propósitos de mi problema.

Lo único, ¿me gustaría añadir en esto los días festivos?

Saludos

Hay @v-robertq-msft ,

Gracias por su ayuda.

Crear una tabla de calendario:

Date = CALENDAR(DATE(2021,1,1),DATE(2021,12,31))

Esta parte es clara. Utilicé la función automática de calendario, pero eso no debería hacer ninguna diferencia.

Cree una columna calculada:

Isworkday =

IF(WEEKDAY([Date],2)>5,0,1)

Esta parte también es clara.

Es posible que la siguiente parte no funcione completamente.

A continuación, cree una medida:

Count of workdays =

CALCULATE(SUM('Date'[Isworkday]),ALLSELECTED('Date'))

A continuación, puede crear una segmentación de datos y un gráfico de tarjetas para colocarlos de la siguiente manera:

vrobertqmsft_0-1625042593505.png


Sin embargo, entiendo lo que has hecho.

Pero no estoy tratando de calcular los días laborables basados en una segmentación de datos, estoy tratando de calcular los días laborables entre dos fechas en una tabla de hechos separada.

Para la mayoría de las fechas parece funcionar, sin embargo, cuando las fechas se extienden a lo largo del año, el resultado es inexacto.

¿Está esto claro para usted? o puedo hacer cualquier otra cosa para elaborar?

gracias.

Syndicate_Admin
Administrator
Administrator

Allí, @PaulusD

De acuerdo con su descripción e imágenes de muestra, puedo' averiguar cuál es la lógica de su columna calculada [WorkDaysCounter], ¿por qué ha navegado por los números? ¿Te gustaría explicarlo en detalle?

Además, creo que es mejor si puede cargar el archivo pbix de prueba sin datos confidenciales o algunos datos de muestra para que podamos ayudarlo de antemano.

Cómo obtener una respuesta rápida a su pregunta

¡Muchas gracias!

Saludos

Equipo de apoyo a la comunidad _Robert Qin

Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola @v-robertq-msft ,

La idea es que estemos midiendo el recuento de días laborables entre dos fechas. En base a esto, podemos medir si un envío se entregó dentro del plazo de entrega contractual.

Estoy bastante seguro de que el enfoque que he tomado está en línea con las mejores prácticas para esto (basado en la información que se encuentra en la comunidad y la web).

Si consigo que esto funcione, podríamos incorporar las fiestas nacionales y terminar con una verdadera medición neta en términos de rendimiento.

Me treid dos enfoques.

Uno donde un retorno un valor de 1 (para días laborables) y un 0 para fines de semana. En el cálculo cuento los resultados totales entre fechas.

La segunda es que compruebo si la fecha es un día laborable, devolviendo verdadero para días laborables y falso para fines de semana. En el cálculo utilicé countrows filtrando en valores verdaderos.

ninguno de estos proporcionar los resultados que veo otros generando y yo justo cant averiguar fuera donde i'm yendo mal 😞

Syndicate_Admin
Administrator
Administrator

Cualquier otro consejo que pudiera probar es bienvenido, todavía no he podido resolver esto.
Como se mencionó, estoy trabajando con una tabla de fechas separada.

gracias.

Syndicate_Admin
Administrator
Administrator

@lbendlin como @PaulusD mencionó, ya tiene una dimensión de calendario y agrega este día de la semana en esa dimensión. Creo que va por buen camino.

@PaulusD Proporcione más detalles en qué caso no está devolviendo los datos. Veo que está filtrando las dimensiones del calendario de la tabla SO_DEL que dará solo las fechas de la tabla Calendario que existen en la tabla SO_DEL, suponiendo que estas dos tablas tengan una relación. ¿Alguna razón por la que estás haciendo eso?

Consulte mi última entrada de blog comparando el cliente seleccionado con otros clientes N principales | PeryTUS Me gustaría ❤ Felicitaciones si mi solución ayudó. 👉 Si puede pasar tiempo publicando la pregunta, también puede hacer esfuerzos para dar Felicitaciones a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos, formación y consultoría relacionados con Power BI.

No @parry2k ,

Por lo que he leído, debería contar las filas de la tabla de fechas (tabla de dimensiones), donde la fecha de inicio y la fecha de finalización de la acción countrows están determinadas por las fechas pasadas desde la tabla de hechos.

Para algunas fechas esto funciona bien:

PaulusD_0-1624261488628.png

pero para otras fechas se pierde por completo el ápice:

PaulusD_1-1624261684068.png

ahora la fecha introducida en la fuente es incorrecta, pero el punto es que los resultados reflejan el número de días a lo largo de los años entre las fechas.

La tabla de fechas se construye utilizando la función calendarauto, por lo que estoy bastante seguro de que todas las fechas desde la más antigua encontrada hasta la última encontrada están en esa tabla.

Necesito ser capaz de confiar en el forumula cuando i'm midiendo rendimiento basó en fechas.

Syndicate_Admin
Administrator
Administrator

No hagas eso (tratando de usar la función de día de la semana). Utilice una tabla de calendario externa adecuada que cree y mantenga manualmente y que tenga los días laborables reales para su escenario, excluyendo los días festivos, etc.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors