aplicación directa de la función WORKDAY como en Excel

Un usuario Pregunto ✅

Shanmugarajan

Hola,

¿Puedo saber cómo crear la función DÍA DE TRABAJO en powerBI con la función DAX? No tengo vacaciones para agregar. Tengo una columna con fechas y otra columna con números. Solo quería obtener el resultado en una nueva columna con el día laboral agregando números a mi columna existente. ¿Hay alguna manera de hacerlo directamente sin tablas adicionales, por favor?

En respuesta a Shanmugarajan


@Shanmugarajan escribió:

Estimado @Phil_Seamark

Gracias por la respuesta.

En su sintaxis, no pude averiguar dónde ingresar mi día personalizado para agregar para cada fila.

He adjuntado mis datos de muestra. La columna C es mi requisito. ¿Podrías echar un vistazo?

Capture.JPG

¡Gracias por adelantado!


@Shanmugarajan

Puede crear una tabla de calendario como se muestra a continuación

dimdate =
VAR onlyWorkdays =
    FILTER (
        CALENDAR ( "2017-01-01", "2017-12-31" ),
        WEEKDAY ( [Date] ) <> 1
            && WEEKDAY ( [Date] ) <> 7
    )
RETURN
    ADDCOLUMNS (
        onlyWorkdays,
        "Index", RANKX ( onlyWorkdays, [Date],, ASC, DENSE )
    )

Luego, conecte su tabla de origen a la tabla de calendario, cree una medida como

exw date =
VAR DateIndex =
    MAX ( dimdate[Index] )
VAR LeadTime =
    MAX ( 'Table'[Lead Time] )
RETURN
    MAXX (
        FILTER ( ALL ( dimdate ), dimdate[Index] = DateIndex + LeadTime ),
        dimdate[Date]
    )

Capture.PNG

Vea más detalles en el archivo pbix.

En respuesta a Shanmugarajan

Hola @Shanmugarajan

Esta es una forma de hacerlo como columna calculada. Simplemente reemplace Table3 con su propio nombre de tabla

exw date = 
VAR myDate = ADDCOLUMNS(FILTER(CALENDAR(Table3[Order Date],TODAY()),WEEKDAY([Date],3)<5),"Days",1)
VAR Cumulative = 
    ADDCOLUMNS(
        myDate,
        "D", SUMX(filter(myDate,[Date]<EARLIER([Date])),[Days])
                    )
RETURN 
    MINX(FILTER(Cumulative,[D]='Table3'[Lead Time]),[Date])

image.png

Hola @Shanmugarajan

Podría intentar agregar esta columna calculada a su tabla de fechas

WORKDAY = SWITCH(
                    WEEKDAY([Date],1),
                    -- Is Sunday --
                    7,0,
                    -- Is Saturday --
                    1,0,
                    -- Else --
                    1
                    )

Shanmugarajan

En respuesta a Phil_Seamark

Estimado @Phil_Seamark

Gracias por la respuesta.

En su sintaxis, no pude averiguar dónde ingresar mi día personalizado para agregar para cada fila.

He adjuntado mis datos de muestra. La columna C es mi requisito. ¿Podrías echar un vistazo?

Capture.JPG

¡Gracias por adelantado!

En respuesta a Shanmugarajan


@Shanmugarajan escribió:

Estimado @Phil_Seamark

Gracias por la respuesta.

En su sintaxis, no pude averiguar dónde ingresar mi día personalizado para agregar para cada fila.

He adjuntado mis datos de muestra. La columna C es mi requisito. ¿Podrías echar un vistazo?

Capture.JPG

¡Gracias por adelantado!


@Shanmugarajan

Puede crear una tabla de calendario como se muestra a continuación

dimdate =
VAR onlyWorkdays =
    FILTER (
        CALENDAR ( "2017-01-01", "2017-12-31" ),
        WEEKDAY ( [Date] ) <> 1
            && WEEKDAY ( [Date] ) <> 7
    )
RETURN
    ADDCOLUMNS (
        onlyWorkdays,
        "Index", RANKX ( onlyWorkdays, [Date],, ASC, DENSE )
    )

Luego, conecte su tabla de origen a la tabla de calendario, cree una medida como

exw date =
VAR DateIndex =
    MAX ( dimdate[Index] )
VAR LeadTime =
    MAX ( 'Table'[Lead Time] )
RETURN
    MAXX (
        FILTER ( ALL ( dimdate ), dimdate[Index] = DateIndex + LeadTime ),
        dimdate[Date]
    )

Capture.PNG

Vea más detalles en el archivo pbix.

En respuesta a Eric_Zhang

Hola @Shanmugarajan

Lo que @Eric_Zhang ha sugerido funciona perfectamente para un medida calculada.

Esta es la sintaxis que puede usar si desea tener el valor como columna calculada

dimdate = 
VAR onlyWorkdays =
    FILTER (
        CALENDAR ( "2017-01-01", "2017-12-31" ),
        WEEKDAY ( [Date] , 2 ) < 6
    )
RETURN
    ADDCOLUMNS (
        onlyWorkdays,
        "Index", RANKX ( onlyWorkdays, [Date],, ASC, DENSE )
    )

Cree una relación entre esto y su tabla existente, luego agregue esta columna calculada

EXW Date = 
VAR DateIndex = RELATED('dimdate'[Index])
RETURN CALCULATE(
                MAX('dimdate'[Date]), 
                FILTER(dimdate,dimdate[Index] = DateIndex + 'Table1'[Lead Time])
                )

Shanmugarajan

En respuesta a Phil_Seamark

@Phil_Seamark

Querido Phil,

Tengo una pequeña duda en nuestra discusión anterior. Me has ayudado a agregar un no particular. de días a una fecha y luego encontrar un nuevo día laboral. así que, por ejemplo, si tenemos column1 + day1 = column2, en nuestra fórmula nunca hacemos referencia a nuestra columna1 en ningún lugar, entonces, ¿cómo detecta y calcula la fórmula? Tuve esta duda cuando quise realizar lo mismo para otra columna nueva. ¿Puedes ayudar por favor?

En respuesta a Shanmugarajan

Hola @Shanmugarajan

Parece que el foro que les di simplemente proporciona un número de DÍA LABORAL para cada día laborable del año desde el comienzo del año.

¿Quería mostrar el número de días laborables desde otro punto de partida?

Shanmugarajan

En respuesta a Phil_Seamark

Estimado @Phil_Seamark

Sí, tengo un estado de punto de partida al que necesito agregar un número particular de días para formar una nueva columna de día laboral.

como en mi imagen adjunta, mi punto de partida será OrderDate y tengo que agregar Lead time para formar el resultado EXWdate.

Capture.PNG¡Gracias!

En respuesta a Shanmugarajan

Hola @Shanmugarajan

Esta es una forma de hacerlo como columna calculada. Simplemente reemplace Table3 con su propio nombre de tabla

exw date = 
VAR myDate = ADDCOLUMNS(FILTER(CALENDAR(Table3[Order Date],TODAY()),WEEKDAY([Date],3)<5),"Days",1)
VAR Cumulative = 
    ADDCOLUMNS(
        myDate,
        "D", SUMX(filter(myDate,[Date]<EARLIER([Date])),[Days])
                    )
RETURN 
    MINX(FILTER(Cumulative,[D]='Table3'[Lead Time]),[Date])

image.png

Jerelle

En respuesta a Phil_Seamark

Hola Phil: ¡Gracias por la elegante solución! ¿Es posible modificar esto para tener en cuenta también las vacaciones?

Shanmugarajan

En respuesta a Phil_Seamark

Estimado @Phil_Seamark

lo siento, estaba fuera de la oficina y no pude responder rápido.

Funciona perfectamente.

¿Puedes ayudarme a entender cuál es el valor? [Date] ¿recoger?

otra parte de la fórmula, según tengo entendido.

¡Gracias!

Shanmugarajan

En respuesta a Phil_Seamark

Estimado @Phil_Seamark,

Disculpas por la respuesta tardía ya que estaba fuera de la ciudad.

He probado la solución que me ha dado y funciona perfectamente para una columna calculada que es mi necesidad. Todavía estoy tratando de decodificar las funciones y tratando de aprender la lógica de cómo funciona. Las funciones de DAX son nuevas para mí.

Puede que me haya perdido algo en mi consulta anterior. Quería comprobar cómo se pueden evitar los días festivos al hacer el (cálculo de la fecha del día laborable + el tiempo de entrega). Por ejemplo, si tengo dos conjuntos diferentes de días festivos, uno para Malasia y otro para Tailandia, durante el cálculo, si los datos de mi fila pertenecen a Malasia, el resultado debe excluir los días festivos de Malasia solamente y si la fila es para Tailandia, entonces debe excluir las vacaciones de Tailandia solo. ¿Podría darme un consejo?

PD: En este momento en Excel, las vacaciones de un país son una en una columna. Entonces tengo de 3 a 4 columnas, y mientras uso la función DÍA DE TRABAJO, simplemente mapeo a la columna respectiva.

¡Gracias por su gran apoyo!

@Eric_Zhang muchas gracias por recomendar la solución a través de Measure.

En respuesta a Shanmugarajan

Ajá, lo entiendo. No estaba seguro de lo que hacía la función DÍA DE TRABAJO, pero su imagen ayuda. Le echaré un vistazo a esto esta noche.

Shanmugarajan

En respuesta a Phil_Seamark

@Phil_Seamark

¡Muchas gracias! Mi error, no he sido claro en el mensaje anterior.

¡Esperará!

Deja un comentario

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