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]))))
v-janeyg-msft
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])
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.
v-janeyg-msft
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
)
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:
- No consigo que la medida sume en la tabla;
- 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?
v-janeyg-msft
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])
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?