Skip to content
Snippets Groups Projects
Commit 32c58c3c authored by Cam Saül's avatar Cam Saül
Browse files

Merge pull request #238 from metabase/cum-sum-use-reductions

Use `reductions` for cumulative sum instead of implementing it manually
parents 93840af1 36d3caf6
No related branches found
No related tags found
No related merge requests found
......@@ -219,26 +219,14 @@
first
(= "cum_sum")))
(defn- cumulative-sum
"Recursively cumulative sum a sequence of VALUES."
([values]
{:pre [(sequential? values)
(every? number? values)]}
(cumulative-sum 0 [] values))
([acc-sum acc-values [value & more]]
(let [acc-sum (+ acc-sum value)
acc-values (conj acc-values acc-sum)]
(if-not (seq? more) acc-values
(recur acc-sum acc-values more)))))
(defn- apply-cumulative-sum
"Apply `cumulative-sum` to values of the aggregate `Field` in RESULTS."
"Cumulative sum the values of the aggregate `Field` in RESULTS."
{:arglists '([query results])}
[{[_ field-id] :aggregation} results]
(let [field (field-id->kw field-id)
values (->> results ; make a sequence of cumulative sum values for each row
(map field)
cumulative-sum)]
(reductions +))]
(map (fn [row value] ; replace the value for each row with the cumulative sum value
(assoc row field value))
results values)))
......
......@@ -387,6 +387,7 @@
;; # POST PROCESSING TESTS
;; ## CUMULATIVE SUM
;; ### Simple cumulative sum w/o any breakout
(expect {:status :completed
:row_count 15
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment