in fact, you need a combination of peek() and previous(). With previous(), you can compare the current values of Causal, Date, and Item with the previous values and only if they are the same, then you'd accumulate the values, otherwise you'd start from zero.
Something like this:
IF(Previous(Causal)=Causal and Previous(Date)=Date and Previous(Item) = Item, peek('Cumulative_Qty') + Qty, Qty) as Cumulative_Qty
Notice that Previous() doesn't require single quote around the field name, while Peek() does. There is a reason for using Previous() in your comparison and Peek() in the calculation. I'm describing the process with a lot of detail in my book QlikView Your Business, also using this technique for the Inventory Analysis - check it out!
One more thought... I just noticed your GROUP BY clause. If you just need to aggregate all transactions by these three fields, then you don't need to use Peek() and Previous(). I assumed from your description that you need to know the CUMULATIVE value at the time of each individual transaction (that's common in Inventory Analysis). If you need that, then you don't need to use GROUP BY - just reload the data, sorted by your 3 key fields and a timestamp, and use Peek() and Previous() for the CUMULATIVE calculation.
"IF(Previous(Causal)=Causal and Previous(Date)=Date and Previous(Item) = Item, peek('Cumulative_Qty') + Qty, Qty) as Cumulative_Qty" without GROUP BY and the script works fine but the Cumulative_Qty field is empty.