Olá, Ahmad!
Sua pergunta é excelente e aborda um dos cenários mais comuns e desafiadores no DAX: a soma cumulativa com filtros dinâmicos.
O que você está enfrentando é uma questão sobre como o CALCULATE e o FILTER interagem. A função ALL remove os filtros do contexto, e é por isso que sua soma não respeita o intervalo do contrato. Para resolver isso, você precisa criar uma medida que some os valores dentro de um contexto de datas, mas que também considere o intervalo de cada contrato.
A solução mais elegante e correta para esse caso é usar CALCULATE com uma função de filtro de tempo, como DATESBETWEEN, ou com uma lógica que combine FILTER com a coluna de datas do seu modelo.
Aqui está uma sugestão de medida DAX que deve resolver o seu problema:
Soma Cumulativa =
CALCULATE(
SUM('SuaTabela'[Quantity]),
FILTER(
ALL('SuaTabela'),
'SuaTabela'[Date] <= MAX('SuaTabela'[Date]) &&
'SuaTabela'[Date] >= 'SuaTabela'[StartDate]
)
)
Explicação da medida:
CALCULATE(SUM('SuaTabela'[Quantity])): Esta é a base da sua medida. Ela vai somar a quantidade de produtos.
FILTER(ALL('SuaTabela'), ...): O FILTER é a parte mágica. Ele vai iterar sobre a tabela inteira (removendo o filtro de tempo do contexto com ALL), mas vai manter apenas as linhas que satisfazem as condições que você definir.
'SuaTabela'[Date] <= MAX('SuaTabela'[Date]): Esta condição garante a soma cumulativa. Ela só soma os meses que são menores ou iguais ao mês que está sendo exibido na matriz.
'SuaTabela'[Date] >= 'SuaTabela'[StartDate]: Esta é a condição que resolve o seu problema. Ela garante que a soma só comece a partir da data de início do contrato.
Com essa medida, o Power BI vai respeitar os filtros da matriz (produto e ID do contrato) e, ao mesmo tempo, calcular a soma cumulativa para o período de cada contrato.
Espero que essa solução te ajude! Se precisar de mais ajustes, pode me avisar.