Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,23 @@ cubes:
operator: notEquals
values: [pending]

- name: amount_by_category_day_unfiltered
Comment thread
waralexrom marked this conversation as resolved.
type: sum
sql: "{CUBE.total_amount}"
multi_stage: true
group_by:
- orders.category
- orders.created_at
- orders.created_at.day
filter:
exclude:
- orders.status

- name: amount_category_day_share_percent
type: number
multi_stage: true
sql: "100.0 * {CUBE.total_amount} / nullif({CUBE.amount_by_category_day_unfiltered}, 0)"

# A rank whose ordering ignores the query filter on `status` and whose
# partition drops it. Rank is deliberately left out of the keys side,
# so the ranks span the whole universe and the rows do too.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -536,3 +536,56 @@ async fn test_rank_with_filter_exclude_ranks_over_whole_universe() {
insta::assert_snapshot!(result);
}
}

#[tokio::test(flavor = "multi_thread")]
async fn test_group_by_outside_query_grain_keeps_query_row_set() {
let ctx = create_context();

let query = indoc! {r#"
measures:
- orders.amount_category_day_share_percent
- orders.total_amount
dimensions:
- orders.status
filters:
- dimension: orders.status
operator: equals
values:
- completed
"#};

ctx.build_sql(query).unwrap();

if let Some(result) = ctx.try_execute_pg(query, SEED).await {
insta::assert_snapshot!(result);
}
}

#[tokio::test(flavor = "multi_thread")]
async fn test_group_by_partially_kept_keeps_query_row_set() {
let ctx = create_context();

let query = indoc! {r#"
measures:
- orders.amount_category_day_share_percent
- orders.total_amount
dimensions:
- orders.status
time_dimensions:
- dimension: orders.created_at
granularity: month
filters:
- dimension: orders.status
operator: equals
values:
- completed
order:
- id: orders.created_at
"#};

ctx.build_sql(query).unwrap();

if let Some(result) = ctx.try_execute_pg(query, SEED).await {
insta::assert_snapshot!(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
source: cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/filter_directive.rs
expression: result
---
orders__status | orders__amount_category_day_share_percent | orders__total_amount
---------------+-------------------------------------------+---------------------
completed | 62.2222222222222222 | 1400.00
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
source: cubesqlplanner/cubesqlplanner/src/tests/integration/multi_stage/filter_directive.rs
expression: result
---
orders__status | orders__created_at_month | orders__amount_category_day_share_percent | orders__total_amount
---------------+--------------------------+-------------------------------------------+---------------------
completed | 2024-01-01 00:00:00 | 60.0000000000000000 | 300.00
completed | 2024-02-01 00:00:00 | 66.6666666666666667 | 500.00
completed | 2024-03-01 00:00:00 | 60.0000000000000000 | 600.00
Loading