Recuento ponderado de artículos por fracción del año retenido (por fecha de inicio / fecha de finalización)

Un usuario Pregunto ✅

Anónimo

Digamos que quiero contar la cantidad de artículos que tiene una empresa a lo largo de los años. ¿Cómo cuento los artículos por la fracción del año en que se llevaron a cabo?

Ejemplo, el artículo A estuvo en manos de una empresa desde 2015.05.01 hasta 2018.03.04, representado en los datos de la siguiente manera:

Nombre del árticulo fecha_comienzo (aaaa-mm-dd) date_end (aaaa-mm-dd)
Elemento A 2015-05-01 2018-03-04

Si hago un visual en powebi que muestre el recuento de elementos retenidos a lo largo de los años, esto es lo que quiero ver:

Articulo 2015 2016 2017 2018
Elemento A 0,668493 1 1 0.172603

Explicación:

0,668493 = (31-12-2015 menos 1-5-2015 = 244 días) / 365 días en 2015 = 244/365 = 0,668493

0.706849 = (4-3-2018 menos 1-1-2018 = 63 días) / 365 días = 63/365 = 0.172603

¿Cómo defino el recuento ponderado anterior en una fórmula DAX?

Puedo contar la ocurrencia de un artículo en un año en función de columnas separadas para la fecha de inicio y finalización con la siguiente fórmula de dax, pero eso no me da una ponderado contar. Parece que no puedo dar el siguiente paso …

Count_item_per_year = CALCULATE(COUNT(Table[Items]),
                          FILTER (  Table,
                                    Table[start_date] <= CALCULATE(MAX(calender[date])) &&
                                     Table[end_date] >= CALCULATE(MIN(calender[date]))))

En respuesta a Anónimo

Hola, @Anónimo

Tratar:

Measure = 
SUMX(SUMMARIZE('Table',[date_begin],[date_end],[Item_name],"a",
VAR begindate =
    SELECTEDVALUE ( 'Table'[date_begin] )
VAR enddate =
    SELECTEDVALUE ( 'Table'[date_end] )
VAR yearbegin =
    YEAR ( begindate )
VAR daybegin =
    DATEDIFF ( DATE ( yearbegin, 1, 1 ), DATE ( yearbegin, 12, 31 ), DAY ) + 1
VAR yearend =
    YEAR ( enddate )
VAR dayend =
    DATEDIFF ( DATE ( yearend, 1, 1 ), DATE ( yearend, 12, 31 ), DAY ) + 1
    
VAR yeartotal = SELECTEDVALUE(YearTable[Year])
 return  SWITCH (
        TRUE (),
        yearbegin = yeartotal, DIVIDE ( DATEDIFF ( begindate, DATE ( yearbegin, 12, 31 ), DAY ), daybegin ),
        yearend = yeartotal, DIVIDE ( DATEDIFF ( enddate, DATE ( yearend, 12, 31 ), DAY ), dayend ),
        yeartotal > yearbegin
            && yeartotal < yearend, 1,
           yeartotal=0,
            DIVIDE ( DATEDIFF ( begindate, DATE ( yearbegin, 12, 31 ), DAY ), daybegin )+DIVIDE ( DATEDIFF ( enddate, DATE ( yearend, 12, 31 ), DAY ), dayend )+(yearend-yearbegin-1)               
)),[a])

5.png

Debe saber que el contexto de cada elemento visual es diferente y una medida no es universal.

Si no resuelve su problema, no dude en preguntarme.

Atentamente

Janey Guo

Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Hola, @Anónimo

De acuerdo con su descripción, creo una tabla de años (ingrese datos) y una medida para calcular el resultado deseado.

Como esto:

Measure =
VAR begindate =
    SELECTEDVALUE ( 'Table'[date_begin] )
VAR enddate =
    SELECTEDVALUE ( 'Table'[date_end] )
VAR yearbegin =
    YEAR ( begindate )
VAR daybegin =
    DATEDIFF ( DATE ( yearbegin, 1, 1 ), DATE ( yearbegin, 12, 31 ), DAY ) + 1
VAR yearend =
    YEAR ( enddate )
VAR dayend =
    DATEDIFF ( DATE ( yearend, 1, 1 ), DATE ( yearend, 12, 31 ), DAY ) + 1
VAR yeartotal =
    SELECTEDVALUE ( 'YearTable'[Year] )
RETURN
    SWITCH (
        TRUE (),
        yearbegin = yeartotal, DIVIDE ( DATEDIFF ( begindate, DATE ( yearbegin, 12, 31 ), DAY ), daybegin ),
        yearend = yeartotal, DIVIDE ( DATEDIFF ( enddate, DATE ( yearend, 12, 31 ), DAY ), dayend ),
        yeartotal > yearbegin
            && yeartotal < yearend, 1
    )

12.png

Aquí está mi archivo .pbix de muestra. Espero que ayude.

Si no resuelve su problema, no dude en preguntarme.

Atentamente

Janey Guo

Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

Anónimo

En respuesta a v-janeyg-msft

Gracias por tu contribución y el tiempo que te tomaste para hacer un ejemplo de pbix !!! Está tan cerca de lo que estoy buscando. Ahora, ¿cómo puedo hacer que esta medida sea sumable (el total permanece vacío) y / o hacer que funcione cuando hay una ‘categoría’? Ver captura de pantalla:

  1. No consigo que la medida sume en la tabla;
  2. Añado un «parámetro» a los datos, si hago un gráfico o tabla, solo quiere mostrar el parámetro «Alfa», no muestra ni suma el parámetro «Charlie» en el mismo gráfico / tabla, ni muestra nada cuando solo selecciono a Charlie en la cortadora. Sospecho que esto tiene que ver con el problema que tengo en 1 …

¿Es esto solucionable?

XZ_Excel_0-1611243488566.png

En respuesta a Anónimo

Hola, @Anónimo

Tratar:

Measure = 
SUMX(SUMMARIZE('Table',[date_begin],[date_end],[Item_name],"a",
VAR begindate =
    SELECTEDVALUE ( 'Table'[date_begin] )
VAR enddate =
    SELECTEDVALUE ( 'Table'[date_end] )
VAR yearbegin =
    YEAR ( begindate )
VAR daybegin =
    DATEDIFF ( DATE ( yearbegin, 1, 1 ), DATE ( yearbegin, 12, 31 ), DAY ) + 1
VAR yearend =
    YEAR ( enddate )
VAR dayend =
    DATEDIFF ( DATE ( yearend, 1, 1 ), DATE ( yearend, 12, 31 ), DAY ) + 1
    
VAR yeartotal = SELECTEDVALUE(YearTable[Year])
 return  SWITCH (
        TRUE (),
        yearbegin = yeartotal, DIVIDE ( DATEDIFF ( begindate, DATE ( yearbegin, 12, 31 ), DAY ), daybegin ),
        yearend = yeartotal, DIVIDE ( DATEDIFF ( enddate, DATE ( yearend, 12, 31 ), DAY ), dayend ),
        yeartotal > yearbegin
            && yeartotal < yearend, 1,
           yeartotal=0,
            DIVIDE ( DATEDIFF ( begindate, DATE ( yearbegin, 12, 31 ), DAY ), daybegin )+DIVIDE ( DATEDIFF ( enddate, DATE ( yearend, 12, 31 ), DAY ), dayend )+(yearend-yearbegin-1)               
)),[a])

5.png

Debe saber que el contexto de cada elemento visual es diferente y una medida no es universal.

Si no resuelve su problema, no dude en preguntarme.

Atentamente

Janey Guo

Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.

mahoneypat

Aquí hay una forma de hacerlo (esto supone que no hay relación entre su tabla de fecha y la tabla con los datos del artículo). Cambie el nombre de los elementos a su nombre de tabla real.

Porcentaje del año =
VAR vMinDate =
MIN ( ‘Fecha'[Date] )
VAR vMaxdate =
MAX ( ‘Fecha'[Date] )
VAR vItemStart =
MIN ( Elementos[StartDate] )
VAR vItemEnd =
MAX ( Elementos[EndDate] )
VAR vNewMin =
MAX (
vMinDate,
vItemStart
)
VAR vNewMax =
MIN (
vMaxdate,
vItemEnd
)
VAR vResult =
DIVIDIR (
DATEDIFF (
vNewMin,
vNewMax,
DÍA
),
DATEDIFF (
vMinDate,
vMaxdate,
DÍA
)
)
REGRESO
SI (
vResult > 0,
vResult
)

Palmadita

Anónimo

En respuesta a mahoneypat

Hola Pat, gracias por tu respuesta! Pero me cuesta entender esto 🙂

Probablemente esté malinterpretando lo que publicaste, pero parece que el resultado final de esto es una fracción de un año (¿vresult?) Pero, ¿cómo hace esto el recuento ponderado de un año? (vea el ejemplo que doy para un recuento no ponderado de un año («Count_item_per_year»), si agrego esto a una imagen que tiene los años, esta medida agregará el recuento no ponderado de elementos en ese año).

¿Cómo / dónde usaría su medida?

Deja un comentario

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