Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now
Queridos
No tengo esa experiencia en las medidas de Power Bi, aunque estoy buscando su ayuda en el siguiente escenario:
Lo que estoy buscando es calcular la suma de las fechas de trabajo horas entre las fechas de segmentación. Teniendo en cuenta:
A continuación tengo esta consulta DAX, aunque devuelve la suma de las fechas de trabajo horas de inicio y finalización de las fechas sin tener en cuenta la fecha de finalización de los empleados.
Mi DAX:
Horas netas de recursos - TODOS los
var Current_Employee
MAX('Recursos HR'[Nombre del empleado])
var Hiring_Date á
CALCULAR (
MAX ( 'Recursos HR'[Fecha de contratación de empresas] ),
FILTRO ( 'Recursos hr', 'Recursos hr'[Nombre del empleado] - Current_Employee ) )
var Termination_Date á
CALCULAR (
MAX ('Recursos HR'[Fecha de terminación]),
FILTRO ( 'Recursos hr', 'Recursos hr'[Nombre del empleado] - Current_Employee ) )
VAR Slicer_Start_Date
CALCULAR (
MIN ( 'Calendario'[Fecha] ), ALLSELECTED ( 'Calendario' )
VAR Slicer_End_Date
CALCULAR (
MAX ( 'Calendar'[Fecha] ), ALLSELECTED ( 'Calendar' )
VAR Start_Date
if(Slicer_Start_Date>-Hiring_Date,Slicer_Start_Date,Hiring_Date)
VAR End_Date
if(Slicer_End_Date>-Termination_Date,Termination_Date,Slicer_End_Date)
devolución
CALCULATE ( SUM ( 'Calendar'[Net Hours] ),
FILTRO (
'Calendario',
'Calendario'[Fecha] > Start_Date
&& Calendario[Fecha] <- End_Date
&& ISBLANK([OTL Hrs Sum])
|| [OTL Hrs Sum]-0
|| [OTL Hrs Sum]>0
) )
Datos de muestra:
Slicer Date digamos del 1 de enero de 2020 al 30 de abril de 2020 y que cada fecha de trabajo es de 8 horas al día
Nombre del empleado | Fecha de contratación | Fecha de terminación | Horas netas reales entre rebanadoras | Horas netas de recursos (por encima de DAX) |
X | 1 Dic 2017 | 2 Mar 2020 | 352 | 686 |
Y | 5 de febrero de 2020 | 30 abr. 2020 | 486 | 686 |
Hola @tabuzahra ,
Cree 2 medidas como se indica a continuación:
Actual Net hours between slicers =
var _min=MINX(ALLSELECTED('Table 2'),'Table 2'[Date])
var _max=MAXX(ALLSELECTED('Table 2'),'Table 2'[Date])
var _minactual=IF(_min>=MAX('Table'[Hiring Date]),_min,MAX('Table'[Hiring Date]))
var _maxactual=IF(_max>=MAX('Table'[Termination Date]),MAX('Table'[Termination Date]),_max)
Return
CALCULATE(SUMX(FILTER(ALL('Table 2'),'Table 2'[Date]>=_minactual&&'Table 2'[Date]<=_maxactual),'Table 2'[Column])*8,ALLEXCEPT('Table','Table'[Employee Name]))
Resources Net Hours (Above DAX) =
var _mindate= MINX(FILTER(ALL('Table 2'),'Table 2'[Date]>=DATE(2020,1,1)&&'Table 2'[Date]<=DATE(2020,4,30)&&'Table 2'[Column]=1),'Table 2'[Date])
var _maxdate=MAXX(FILTER(ALL('Table 2'),'Table 2'[Date]>=DATE(2020,1,1)&&'Table 2'[Date]<=DATE(2020,4,30)&&'Table 2'[Column]=1),'Table 2'[Date])
Return
SUMX(FILTER(ALL('Table 2'),'Table 2'[Date]>=_mindate&&'Table 2'[Date]<=_maxdate),'Table 2'[Column])*8
Finalmente verá:
Para el archivo .pbix relacionado, haga clic aquí.
Hola Kelly,
Muy apreciado, funciona bien.
Sin embargo, ¿cómo muestro 0 en lugar de estar en blanco en caso de que la fecha de inicio de la segmentación de datos sea > de la fecha de contratación?
Hola @tabuzahra ,
Siento no haber captado tu significado... en la salida, es un valor total de horas, así que ¿dónde quiere decir sobre el espacio en blanco?
Hola @v-kelly-msft ,
Lo que quise decir es que cuando eliges la fecha de inicio de la segmentación > fecha de terminación, da en blanco en el "Horas netas reales entre segmentaciones de datos" donde quiero que dé un valor 0. Como estoy usando esta medida para calcular otra cosa con ella en otra medida.
Hola @tabuzahra ,
Pero su segmentación de datos es un período de fecha, ¿cuál desearía comparar con los datos de terminación? ¿O quiere decir que una fecha en el período de fecha es después de la fecha de terminación, entonces debe devolver 0??
Esto sería mucho más fácil de solucionar con los datos de origen de ejemplo o el PBIX. Por favor, consulte este post sobre cómo obtener su pregunta respondida rápidamente: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490
Si tiene el nombre de un empleado en un objeto visual, entonces debería ser capaz de hacer algo como esto:
Resources Net Hours - ALL =
var Current_Employee = MAX('HR Resources'[Employee Name])
var Hiring_Date = MAX ( 'HR Resources'[Enterprise Hire Date] ) // context already filters to employee
var Termination_Date = MAX ( 'HR Resources'[Termination Date])
VAR Slicer_Start_Date = MIN ( 'Calendar'[Date] ) // again, context already filters (slicer)
VAR Slicer_End_Date = MAX ( 'Calendar'[Date] )
VAR Start_Date =
if(Slicer_Start_Date>=Hiring_Date,Slicer_Start_Date,Hiring_Date)
VAR End_Date=
if(Slicer_End_Date>=Termination_Date,Termination_Date,Slicer_End_Date)
RETURN
SUMX (
FILTER (
'Calendar',
('Calendar'[Date] >= Start_Date
&& Calendar[Date] <= End_Date )
&& ( ISBLANK([OTL Hrs Sum])
|| [OTL Hrs Sum]=0
|| [OTL Hrs Sum]>0 )
),
'Calendar'[Net Hours]
)
Hay muchos lugares en los que las cosas podrían estar saliendo mal. Estoy pensando en sus filtros al final tal vez así que traté de arreglarlos.
Querido Greg,
Muchas gracias por su rápida respuesta. En realidad, funcionó bien, aunque estoy enfrentando este siguiente problema:
Si elijo las fechas en la cortadora desde el 1 de enero de 2020 hasta el 30 de abril de 2020, Devuelve las horas de trabajo correctas para el empleado Y (su fecha de terminación fue 2 Mar 2020) que es 352 en lugar de 686. Sin embargo, si elijo la segmentación de datos de 15 ene 2020 hasta el 30 de abril de 2020, devuelve BLANK.
Sugerencia: La tabla employees tiene una relación con la tabla TimeSheet por número de persona.
Por lo tanto, después de haberlo investigado, el dax que se ha proporcionado desde su propio tipo devuelve las horas de trabajo correctas solo si el empleado ha enviado horas en la tabla de hojas de horas entre las fechas de las segmentaciones de datos y el empleado no envió ninguna hora entre las fechas de segmentación de datos devuelve BLANK.
No estoy seguro de por qué busca los valores en la tabla de hojas de horas.
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.