def test_build_query_with_multiple_dimensions_and_visualizations(self): queries = ( mock_dataset.query() .widget(f.ReactTable(mock_dataset.fields.votes, mock_dataset.fields.wins)) .widget( f.HighCharts() .axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) .axis(f.HighCharts.LineSeries(mock_dataset.fields.wins)) ) .dimension(f.day(mock_dataset.fields.timestamp)) .dimension(mock_dataset.fields.political_party) .sql ) self.assertEqual(len(queries), 1) self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' '"political_party" "$political_party",' 'SUM("votes") "$votes",' 'SUM("is_winner") "$wins" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp","$political_party" ' 'ORDER BY "$timestamp","$political_party"', str(queries[0]), )
def test_dod(self): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(timestamp_daily) .reference(f.DayOverDay(mock_dataset.fields.timestamp)) .sql ) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[0]), ) with self.subTest( "reference query is same as base query with reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('day',1,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[1]), )
def test_dimension_with_single_reference_wow(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp) \ .reference(f.WeekOverWeek(slicer.dimensions.timestamp)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'week\',1,"timestamp"),\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes_wow" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_reference_with_dimension_using_display_definition_includes_it_in_all_queries(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp) \ .dimension(slicer.dimensions.candidate) \ .reference(f.YearOverYear(slicer.dimensions.timestamp)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' '"candidate_id" "$d$candidate",' '"candidate_name" "$d$candidate_display",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp","$d$candidate","$d$candidate_display" ' 'ORDER BY "$d$timestamp","$d$candidate_display"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'year\',1,"timestamp"),\'DD\') "$d$timestamp",' '"candidate_id" "$d$candidate",' '"candidate_name" "$d$candidate_display",' 'SUM("votes") "$m$votes_yoy" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp","$d$candidate","$d$candidate_display" ' 'ORDER BY "$d$timestamp","$d$candidate_display"', str(queries[1]))
def test_filters_on_other_dimensions_are_not_adapted(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp) \ .reference(f.DayOverDay(slicer.dimensions.timestamp)) \ .filter(slicer.dimensions.timestamp .between(date(2018, 1, 1), date(2018, 1, 31))) \ .filter(slicer.dimensions.political_party .isin(['d'])) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'WHERE "timestamp" BETWEEN \'2018-01-01\' AND \'2018-01-31\' ' 'AND "political_party" IN (\'d\') ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'day\',1,"timestamp"),\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician" ' 'WHERE TIMESTAMPADD(\'day\',1,"timestamp") BETWEEN \'2018-01-01\' AND \'2018-01-31\' ' 'AND "political_party" IN (\'d\') ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_adding_duplicate_reference_does_not_join_more_queries(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp) \ .reference(f.DayOverDay(slicer.dimensions.timestamp), f.DayOverDay(slicer.dimensions.timestamp)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'day\',1,"timestamp"),\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_use_same_nested_query_for_joining_references_with_same_period_and_dimension(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp) \ .reference(f.DayOverDay(slicer.dimensions.timestamp), f.DayOverDay(slicer.dimensions.timestamp, delta=True), f.DayOverDay(slicer.dimensions.timestamp, delta_percent=True)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'day\',1,"timestamp"),\'DD\') "$d$timestamp",' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_reference_on_dimension_with_weekly_interval(self): weekly_timestamp = slicer.dimensions.timestamp(f.weekly) queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(weekly_timestamp) \ .reference(f.DayOverDay(weekly_timestamp)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'IW\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TRUNC(TIMESTAMPADD(\'day\',1,"timestamp"),\'IW\') "$d$timestamp",' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_single_reference_dod_with_dimension_but_not_reference_dimension_in_query_using_filter(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.political_party) \ .reference(f.DayOverDay(slicer.dimensions.timestamp)) \ .filter(slicer.dimensions.timestamp.between(date(2000, 1, 1), date(2000, 3, 1))) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' '"political_party" "$d$political_party",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'WHERE "timestamp" BETWEEN \'2000-01-01\' AND \'2000-03-01\' ' 'GROUP BY "$d$political_party" ' 'ORDER BY "$d$political_party"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' '"political_party" "$d$political_party",' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician" ' 'WHERE TIMESTAMPADD(\'day\',1,"timestamp") BETWEEN \'2000-01-01\' AND \'2000-03-01\' ' 'GROUP BY "$d$political_party" ' 'ORDER BY "$d$political_party"', str(queries[1]))
def test_date_dim_with_weekly_interval(self): weekly_timestamp = f.week(mock_dataset.fields.timestamp) queries = (mock_dataset.query.widget(f.HighCharts().axis( f.HighCharts.LineSeries(mock_dataset.fields.votes))).dimension( weekly_timestamp).reference( f.DayOverDay(weekly_timestamp)).sql) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'IW\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[0]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('day',1,TRUNC(\"timestamp\",'IW')),'IW') \"$timestamp\"," 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[1]), )
def test_yoy_with_monthly_interval(self): queries = (mock_dataset.query.widget(f.HighCharts().axis( f.HighCharts.LineSeries(mock_dataset.fields.votes))).dimension( timestamp_monthly).reference( f.YearOverYear(mock_dataset.fields.timestamp)).sql) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'MM\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[0]), ) with self.subTest( "reference query is same as base query with reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('year',1,TRUNC(\"timestamp\",'MM')),'MM') \"$timestamp\"," 'SUM("votes") "$votes_yoy" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[1]), )
def test_adapt_dow_for_leap_year_for_yoy_reference_with_date_filter(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .dimension(slicer.dimensions.timestamp(f.weekly)) \ .reference(f.YearOverYear(slicer.dimensions.timestamp)) \ .filter(slicer.dimensions.timestamp.between(date(2018, 1, 1), date(2018, 1, 31))) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'TRUNC("timestamp",\'IW\') "$d$timestamp",' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician" ' 'WHERE "timestamp" BETWEEN \'2018-01-01\' AND \'2018-01-31\' ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[0])) with self.subTest('reference query is same as base query with filter on reference dimension shifted'): self.assertEqual('SELECT ' 'TIMESTAMPADD(\'year\',-1,TRUNC(TIMESTAMPADD(\'year\',1,"timestamp"),\'IW\')) ' '"$d$timestamp",' 'SUM("votes") "$m$votes_yoy" ' 'FROM "politics"."politician" ' 'WHERE TIMESTAMPADD(\'year\',1,"timestamp") BETWEEN \'2018-01-01\' AND \'2018-01-31\' ' 'GROUP BY "$d$timestamp" ' 'ORDER BY "$d$timestamp"', str(queries[1]))
def test_build_query_for_chart_visualization_with_single_axis(self): queries = mock_dataset.query \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(mock_dataset.fields.votes))) \ .sql self.assertEqual(len(queries), 1) self.assertEqual( 'SELECT ' 'SUM("votes") "$votes" ' 'FROM "politics"."politician"', str(queries[0]))
def test_build_query_for_chart_visualization_with_single_axis(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .queries self.assertEqual(len(queries), 1) self.assertEqual( 'SELECT ' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician"', str(queries[0]))
def test_use_same_nested_query_for_joining_references_with_same_period_and_dimension_with_different_periods( self, ): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(timestamp_daily) .reference( f.DayOverDay(mock_dataset.fields.timestamp), f.DayOverDay(mock_dataset.fields.timestamp, delta=True), # also work with modified dimensions f.YearOverYear(timestamp_daily), f.YearOverYear(timestamp_daily, delta=True), ) .sql ) self.assertEqual(3, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[0]), ) with self.subTest("second query for all DoD references"): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('day',1,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[1]), ) with self.subTest("third query for all YoY references"): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('week',52,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_yoy" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[2]), )
def test_dimension_with_multiple_references(self): queries = (mock_dataset.query.widget(f.HighCharts().axis( f.HighCharts.LineSeries(mock_dataset.fields.votes))).dimension( timestamp_daily).reference( f.DayOverDay(mock_dataset.fields.timestamp)).reference( f.YearOverYear(mock_dataset.fields.timestamp, delta_percent=True)).sql) self.assertEqual(3, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[0]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('day',1,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[1]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('week',52,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_yoy" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp" ' 'LIMIT 200000', str(queries[2]), )
def test_build_query_for_chart_visualization_with_multiple_axes(self): queries = mock_dataset.query.widget(f.HighCharts().axis( f.HighCharts.LineSeries(mock_dataset.fields.votes)).axis( f.HighCharts.LineSeries(mock_dataset.fields.wins))).sql self.assertEqual(len(queries), 1) self.assertEqual( 'SELECT ' 'SUM("votes") "$votes",' 'SUM("is_winner") "$wins" ' 'FROM "politics"."politician" ' 'ORDER BY 1 ' 'LIMIT 200000', str(queries[0]), )
def test_filters_on_other_dimensions_are_not_adapted(self): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(timestamp_daily) .reference(f.DayOverDay(mock_dataset.fields.timestamp)) .filter( mock_dataset.fields.timestamp.between( date(2018, 1, 1), date(2018, 1, 31) ) ) .filter(mock_dataset.fields.political_party.isin(["d"])) .sql ) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN '2018-01-01' AND '2018-01-31' " "AND \"political_party\" IN ('d') " 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[0]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('day',1,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN TIMESTAMPADD('day',-1,'2018-01-01') AND TIMESTAMPADD('day',-1,'2018-01-31') " "AND \"political_party\" IN ('d') " 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(queries[1]), )
def test_single_reference_dod_with_no_dimension_uses_multiple_from_clauses_instead_of_joins(self): queries = slicer.data \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes))) \ .reference(f.DayOverDay(slicer.dimensions.timestamp)) \ .queries self.assertEqual(2, len(queries)) with self.subTest('base query is same as without reference'): self.assertEqual('SELECT ' 'SUM("votes") "$m$votes" ' 'FROM "politics"."politician"', str(queries[0])) with self.subTest('reference query is same as base query'): self.assertEqual('SELECT ' 'SUM("votes") "$m$votes_dod" ' 'FROM "politics"."politician"', str(queries[1]))
def test_reference_with_no_dimensions_or_filters_creates_same_query(self): # TODO reduce this to a single query queries = (mock_dataset.query.widget(f.HighCharts().axis( f.HighCharts.LineSeries(mock_dataset.fields.votes))).reference( f.DayOverDay(mock_dataset.fields.timestamp)).sql) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( 'SELECT SUM("votes") "$votes" FROM "politics"."politician" ORDER BY 1 LIMIT 200000', str(queries[0]), ) with self.subTest("reference query is same as base query"): self.assertEqual( 'SELECT SUM("votes") "$votes_dod" FROM "politics"."politician" ORDER BY 1 LIMIT 200000', str(queries[1]), )
def test_reference_without_selecting_ref_dimension_using_date_range_filter(self): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(mock_dataset.fields.political_party) .reference(f.DayOverDay(mock_dataset.fields.timestamp)) .filter( mock_dataset.fields.timestamp.between( date(2000, 1, 1), date(2000, 3, 1) ) ) .sql ) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " '"political_party" "$political_party",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN '2000-01-01' AND '2000-03-01' " 'GROUP BY "$political_party" ' 'ORDER BY "$political_party"', str(queries[0]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " '"political_party" "$political_party",' 'SUM("votes") "$votes_dod" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN TIMESTAMPADD('day',-1,'2000-01-01') " "AND TIMESTAMPADD('day',-1,'2000-03-01') " 'GROUP BY "$political_party" ' 'ORDER BY "$political_party"', str(queries[1]), )
def test_build_query_with_multiple_dimensions_and_visualizations(self): queries = slicer.data \ .widget(f.DataTablesJS(slicer.metrics.votes, slicer.metrics.wins)) \ .widget(f.HighCharts() .axis(f.HighCharts.LineSeries(slicer.metrics.votes)) .axis(f.HighCharts.LineSeries(slicer.metrics.wins))) \ .dimension(slicer.dimensions.timestamp) \ .dimension(slicer.dimensions.political_party) \ .queries self.assertEqual(len(queries), 1) self.assertEqual( 'SELECT ' 'TRUNC("timestamp",\'DD\') "$d$timestamp",' '"political_party" "$d$political_party",' 'SUM("votes") "$m$votes",' 'SUM("is_winner") "$m$wins" ' 'FROM "politics"."politician" ' 'GROUP BY "$d$timestamp","$d$political_party" ' 'ORDER BY "$d$timestamp","$d$political_party"', str(queries[0]))
def test_reference_with_dimension_using_display_definition_includes_it_in_all_queries( self, ): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(timestamp_daily) .dimension(mock_dataset.fields["candidate-name"]) .reference(f.YearOverYear(mock_dataset.fields.timestamp)) .sql ) self.assertEqual(2, len(queries)) with self.subTest("base query is same as without reference"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' '"candidate_name" "$candidate-name",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp","$candidate-name" ' 'ORDER BY "$timestamp","$candidate-name"', str(queries[0]), ) with self.subTest( "reference query is same as base query with filter on reference dimension shifted" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('week',52,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," '"candidate_name" "$candidate-name",' 'SUM("votes") "$votes_yoy" ' 'FROM "politics"."politician" ' 'GROUP BY "$timestamp","$candidate-name" ' 'ORDER BY "$timestamp","$candidate-name"', str(queries[1]), )
def test_highcharts_requires_at_least_one_axis(self): with self.assertRaises(MetricRequiredException): slicer.data \ .widget(f.HighCharts()) \ .dimension(slicer.dimensions.timestamp) \ .queries
def test_highcharts_requires_at_least_one_axis(self): with self.assertRaises(MetricRequiredException): mock_dataset.query.widget(f.HighCharts()).dimension( mock_dataset.fields.timestamp).sql
def test_reference_with_rollup_dimension_and_date_range_filter(self): queries = ( mock_dataset.query.widget( f.HighCharts().axis(f.HighCharts.LineSeries(mock_dataset.fields.votes)) ) .dimension(Rollup(timestamp_daily)) .reference(f.WeekOverWeek(mock_dataset.fields.timestamp)) .filter( mock_dataset.fields.timestamp.between( date(2018, 1, 1), date(2018, 1, 31) ) ) .sql ) self.assertEqual(4, len(queries)) base, reference, base_rollup, reference_rollup = queries with self.subTest("base query applies dimensions and date range filter"): self.assertEqual( "SELECT " 'TRUNC("timestamp",\'DD\') "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN '2018-01-01' AND '2018-01-31' " 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(base), ) with self.subTest( "reference query shifts timestamp dimension and date range filter by a week" ): self.assertEqual( "SELECT " "TRUNC(TIMESTAMPADD('week',1,TRUNC(\"timestamp\",'DD')),'DD') \"$timestamp\"," 'SUM("votes") "$votes_wow" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN TIMESTAMPADD('week',-1,'2018-01-01') " "AND TIMESTAMPADD('week',-1,'2018-01-31') " 'GROUP BY "$timestamp" ' 'ORDER BY "$timestamp"', str(reference), ) with self.subTest("totals query selects NULL for timestamp dimension"): self.assertEqual( "SELECT " 'NULL "$timestamp",' 'SUM("votes") "$votes" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN '2018-01-01' AND '2018-01-31' " 'ORDER BY "$timestamp"', str(base_rollup), ) with self.subTest( "reference totals query selects NULL for timestamp dimension and shifts date range filter" ): self.assertEqual( "SELECT " 'NULL "$timestamp",' 'SUM("votes") "$votes_wow" ' 'FROM "politics"."politician" ' "WHERE \"timestamp\" BETWEEN TIMESTAMPADD('week',-1,'2018-01-01') " "AND TIMESTAMPADD('week',-1,'2018-01-31') " 'ORDER BY "$timestamp"', str(reference_rollup), )