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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
tabuzahra
Helper II
Helper II

Suma comularcona con fechas de segmentaciones

Queridos

No tengo esa experiencia en las medidas de Power Bi, aunque estoy buscando su ayuda en el siguiente escenario:

  1. Tengo una tabla de fechas de calendario que incluye cada día las fechas de trabajo horas
  2. Tengo la tabla de recursos que incluye la fecha de contratación y terminación para cada empleado
  3. Tengo una segmentación con las fechas del calendario (Inicio y fin)

Lo que estoy buscando es calcular la suma de las fechas de trabajo horas entre las fechas de segmentación. Teniendo en cuenta:

  1. Si la fecha de inicio de la segmentación de datos es > fecha de contratación, entonces debe tomar la fecha de inicio de la segmentación de datos, de lo contrario tomará la fecha de contratación
  2. Si la fecha de finalización de la segmentación de datos es > fecha de terminación, entonces debe tomar la fecha de terminación, de lo contrario tomará la fecha de finalización de la segmentación de datos

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 empleadoFecha de contrataciónFecha de terminaciónHoras netas reales entre rebanadorasHoras netas de recursos (por encima de DAX)
X1 Dic 20172 Mar 2020352686
Y5 de febrero de 202030 abr. 2020486686
7 REPLIES 7
v-kelly-msft
Community Support
Community Support

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á:

Annotation 2020-05-04 154547.png

Para el archivo .pbix relacionado, haga clic aquí.

Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!

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?


Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!

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??

Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!
Greg_Deckler
Super User
Super User

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.



Follow on LinkedIn
@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
Power BI Cookbook Third Edition (Color)

DAX is easy, CALCULATE makes DAX hard...

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.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors