Hi Expertos,
Estoy tratando de hacer una suma dinámica basada en períodos de tiempo seleccionados para comparar los cambios durante el período de tiempo. El problema que tengo es que necesito poder sumar las ventas solo cuando una tienda está presente en los períodos de tiempo anteriores y posteriores.
Mis datos están estructurados de la siguiente manera:
Tienda | Artículo | Ventas | Período de tiempo |
1 | Punto A | 243 | Q2 2023 |
1 | Punto B | 200 | Q2 2023 |
1 | Punto C | 195 | Q2 2023 |
2 | Punto A | 377 | Q2 2023 |
2 | Punto B | 158 | Q2 2023 |
2 | Punto C | 235 | Q2 2023 |
2 | Tema D | 374 | Q2 2023 |
3 | Punto A | 245 | Q2 2023 |
3 | Punto B | 116 | Q2 2023 |
3 | Punto C | 392 | Q2 2023 |
2 | Punto A | 287 | Q1 2023 |
2 | Punto B | 188 | Q1 2023 |
2 | Punto C | 114 | Q1 2023 |
2 | Tema D | 398 | Q1 2023 |
3 | Punto A | 148 | Q1 2023 |
3 | Punto B | 325 | Q1 2023 |
3 | Punto C | 214 | Q1 2023 |
4 | Punto A | 348 | Q1 2023 |
4 | Punto B | 298 | Q1 2023 |
Mis tablas están configuradas de la siguiente manera:
Las fórmulas para las ventas posteriores al período y las ventas previas al período son las siguientes:
Post Period Sales =
CALCULATE(
SUM(FactSales[Sales]),
GROUPBY(DimItem, DimItem[Item])
)
Pre Period Sales =
CALCULATE(
SUM(FactSales[Sales]),
REMOVEFILTERS(DimTimePeriod[Time Period]),
GROUPBY(DimItem, DimItem[Item]),
USERELATIONSHIP(FactSales[Time Period], DimTimePeriodCompare[Time Period])
)
El diseño en lienzo para una tabla simple tendría DimTimePeriod y DimTimePeriodComparison en segmentaciones de datos para que el usuario final pueda seleccionar qué períodos de tiempo desea comparar.
¿Cómo puedo ajustar mis fórmulas para omitir cualquier tienda que no aparezca en ambos períodos de tiempo? El ejemplo anterior muestra actualmente la suma de las ventas de todas las tiendas, pero las tiendas 1 y 4 no están en ambos períodos de tiempo.
Solved! Go to Solution.
Para cualquiera que se encuentre con esta publicación, pude averiguar cómo hacerlo usando una función INTERSECT y un filtrado inteligente.
Pre Period Sales =
VAR PreStores =
CALCULATETABLE (
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
USERELATIONSHIP ( FactSales[Time Period], DimTimePeriodCompare[Time Period] ),
FILTERS(DimTimePeriodCompare[Time Period])
)
VAR PostStores =
CALCULATETABLE(
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
FILTERS(DimTimePeriod[Time Period]))
VAR CommonStores =
INTERSECT ( PreStores, PostStores )
RETURN
CALCULATE(
SUM(FactSales[Sales]),
REMOVEFILTERS(DimTimePeriod[Time Period]),
GROUPBY(DimItem, DimItem[Item]),
USERELATIONSHIP(FactSales[Time Period], DimTimePeriodCompare[Time Period]),
INTERSECT(CommonStores, VALUES(DimStore[Store])
))
Post Period Sales =
VAR PreStores =
CALCULATETABLE (
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
USERELATIONSHIP ( FactSales[Time Period], DimTimePeriodCompare[Time Period] ),
FILTERS(DimTimePeriodCompare[Time Period])
)
VAR PostStores =
CALCULATETABLE(
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
FILTERS(DimTimePeriod[Time Period]))
VAR CommonStores =
INTERSECT ( PreStores, PostStores )
RETURN
CALCULATE(
SUM( FactSales[Sales] ),
GROUPBY( DimItem, DimItem[Item] ),
INTERSECT(CommonStores, VALUES(DimStore[Store])))
Para las ventas posteriores al período, puede probar y ver si esto funciona ...
Post Period Sales =
var _stores = CALCULATETABLE( VALUES(FactSales[Store]),
REMOVEFILTERS(DimTimePeriod[Time Period]),
USERELATIONSHIP(FactSales[Time Period], DimTimePeriodCompare[Time Period]),
FactSales[Time Period] in VALUES(DimTimePeriodCompare[Time Period]))
RETURN CALCULATE( SUM(FactSales[Sales]), _stores)
Para cualquiera que se encuentre con esta publicación, pude averiguar cómo hacerlo usando una función INTERSECT y un filtrado inteligente.
Pre Period Sales =
VAR PreStores =
CALCULATETABLE (
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
USERELATIONSHIP ( FactSales[Time Period], DimTimePeriodCompare[Time Period] ),
FILTERS(DimTimePeriodCompare[Time Period])
)
VAR PostStores =
CALCULATETABLE(
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
FILTERS(DimTimePeriod[Time Period]))
VAR CommonStores =
INTERSECT ( PreStores, PostStores )
RETURN
CALCULATE(
SUM(FactSales[Sales]),
REMOVEFILTERS(DimTimePeriod[Time Period]),
GROUPBY(DimItem, DimItem[Item]),
USERELATIONSHIP(FactSales[Time Period], DimTimePeriodCompare[Time Period]),
INTERSECT(CommonStores, VALUES(DimStore[Store])
))
Post Period Sales =
VAR PreStores =
CALCULATETABLE (
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
USERELATIONSHIP ( FactSales[Time Period], DimTimePeriodCompare[Time Period] ),
FILTERS(DimTimePeriodCompare[Time Period])
)
VAR PostStores =
CALCULATETABLE(
VALUES ( FactSales[Store] ),
ALLCROSSFILTERED(FactSales),
FILTERS(DimTimePeriod[Time Period]))
VAR CommonStores =
INTERSECT ( PreStores, PostStores )
RETURN
CALCULATE(
SUM( FactSales[Sales] ),
GROUPBY( DimItem, DimItem[Item] ),
INTERSECT(CommonStores, VALUES(DimStore[Store])))
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |